You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Compare commits
158 Commits
release-2.
...
release-py
Author | SHA1 | Date | |
---|---|---|---|
|
136f42a610 | ||
|
c43e734f37 | ||
|
2327f0fdfa | ||
|
0afcd31bd5 | ||
|
6f097ff1ca | ||
|
8eb1a16f5b | ||
|
ed9fb64e72 | ||
|
d002c667ae | ||
|
e56743cc14 | ||
|
39814fab8b | ||
|
970774ab95 | ||
|
723fa5dfed | ||
|
4d4e59c40b | ||
|
a92e6c9688 | ||
|
6c546fe6e1 | ||
|
9b1dd0f26c | ||
|
0ff0c97a95 | ||
|
3e988be075 | ||
|
eb64a03dfa | ||
|
9aa4e2b9ae | ||
|
c147514e9e | ||
|
813229ac45 | ||
|
f1a947f106 | ||
|
2f51067a9d | ||
|
e3f4beeb74 | ||
|
7d58dcf6dd | ||
|
bfff1b4e9f | ||
|
e6761e13bb | ||
|
c7c0a98982 | ||
|
eebec48308 | ||
|
da50394841 | ||
|
13d5cd1a58 | ||
|
08dcc7d820 | ||
|
7755563b65 | ||
|
b43cbc050d | ||
|
db7a26d47d | ||
|
92166452c1 | ||
|
96fa3ef381 | ||
|
755415c7d8 | ||
|
b168e1de55 | ||
|
38eed14b41 | ||
|
2c993f8c32 | ||
|
65858a4c74 | ||
|
263c63e009 | ||
|
813bce4697 | ||
|
a5d2237435 | ||
|
d22931cb49 | ||
|
9cc2700160 | ||
|
a5a0f45dde | ||
|
3c02fa7e36 | ||
|
0d0f836f76 | ||
|
69c93cc665 | ||
|
97576e473d | ||
|
1e324e0e8d | ||
|
7ab4e1fbdb | ||
|
abecb21671 | ||
|
8be6369bdf | ||
|
8941417a54 | ||
|
cbcfd53dae | ||
|
df2ca51f4a | ||
|
4f4069c6b5 | ||
|
6aa1531972 | ||
|
4fcb385dc0 | ||
|
260ddedbfd | ||
|
f8917aaf88 | ||
|
c8550d5c9e | ||
|
1aeb09cb8b | ||
|
f575234fc8 | ||
|
abcd10628a | ||
|
eb2b63ce9c | ||
|
805e17988e | ||
|
80df5dcc95 | ||
|
2bc316d6f0 | ||
|
195bbc746b | ||
|
0f56b4f476 | ||
|
94719918d4 | ||
|
f2a3721d7d | ||
|
79863ae122 | ||
|
d7f898b4fb | ||
|
fe36c9e9f6 | ||
|
76ae1592d0 | ||
|
31d387749b | ||
|
9e3026bd78 | ||
|
bfe7e7777d | ||
|
81b4941fda | ||
|
0f719d41fd | ||
|
766451cbb9 | ||
|
1e4dc52197 | ||
|
6073c77921 | ||
|
b6e53205dd | ||
|
ee6dddd25a | ||
|
968a54512b | ||
|
a81ffe8963 | ||
|
3b9e48a3b6 | ||
|
80a4ad4f1b | ||
|
50c2e1bda9 | ||
|
f4999f6300 | ||
|
0f536b18fa | ||
|
6fb879d0d8 | ||
|
411eaaeafb | ||
|
36874c72e2 | ||
|
7343575e55 | ||
|
fef0567746 | ||
|
41f360e3dc | ||
|
5d10f7a0b0 | ||
|
2a5eda631a | ||
|
a685c60606 | ||
|
d2ac293cf6 | ||
|
cd3cf5ec29 | ||
|
2eaea447eb | ||
|
287e98b4b1 | ||
|
63e4c9343f | ||
|
eab653afdd | ||
|
7700446bb1 | ||
|
bfd2f77fbc | ||
|
1574bf4e1e | ||
|
2328ca7a55 | ||
|
ccdd37611c | ||
|
2e355b6245 | ||
|
9849f06ff6 | ||
|
0e7da031b2 | ||
|
25dd67a135 | ||
|
1a38d3d9aa | ||
|
de65a2c250 | ||
|
7daec3352c | ||
|
8feb472d51 | ||
|
7a10917857 | ||
|
334f6935b6 | ||
|
aff920d87b | ||
|
6319d33fa0 | ||
|
abb61a4d7d | ||
|
b54a19c6ff | ||
|
a4c943fe0d | ||
|
0480455ae1 | ||
|
9b7d978944 | ||
|
a6befdee09 | ||
|
d6f7ef4e17 | ||
|
cec80e696c | ||
|
0826129112 | ||
|
7beaa9f36c | ||
|
78ef16e4d7 | ||
|
59b597ea5d | ||
|
cb8ffa51d7 | ||
|
a7ef513849 | ||
|
8e62a48c96 | ||
|
6d3b934bf2 | ||
|
27fb5758bd | ||
|
5703ccd8b8 | ||
|
20ba165e4a | ||
|
7eb9210b0c | ||
|
fe072d8b57 | ||
|
f430b0dbe4 | ||
|
9ef670c872 | ||
|
c04fe00e50 | ||
|
52691c4e8a | ||
|
f067148b6c | ||
|
bb8d0a6389 | ||
|
97ce330b00 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -1,7 +1,7 @@
|
||||
*.pyo
|
||||
*.pyc
|
||||
*_dis
|
||||
*~
|
||||
*.pyc
|
||||
/.cache
|
||||
/.eggs
|
||||
/.python-version
|
||||
@@ -13,5 +13,6 @@
|
||||
/nose-*.egg
|
||||
/tmp
|
||||
/uncompyle6.egg-info
|
||||
/unpyc
|
||||
__pycache__
|
||||
build
|
||||
|
@@ -8,6 +8,7 @@ python:
|
||||
- '2.6'
|
||||
- '3.3'
|
||||
- '3.4'
|
||||
- '3.2'
|
||||
|
||||
install:
|
||||
- pip install -r requirements.txt
|
||||
|
762
ChangeLog
762
ChangeLog
@@ -1,7 +1,765 @@
|
||||
2016-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/version.py: Get ready for release 2.9.9
|
||||
|
||||
2016-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py: 2.x list_if may have a THEN in it
|
||||
|
||||
2016-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Towards fixing a Python 3.3
|
||||
return/continue bug
|
||||
|
||||
2016-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py: On --verify if we can't unbuffer output, don't
|
||||
|
||||
2016-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py:
|
||||
dectect_structure() -> detect_control_flow()
|
||||
|
||||
2016-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py:
|
||||
DRY code and emitted Python 3 source * Python 3: break; continue -> break * Use variable in detect_structure for pre[rtarget] * Make Python 2 and Python 3 detect_structure more alie
|
||||
|
||||
2016-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: More if/then detection in Python
|
||||
3.x
|
||||
|
||||
2016-12-29 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #73 from rocky/then-crap Add THEN token to improve Python 2.2-2.6 control flow detection
|
||||
|
||||
2016-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/tok.py: Misc
|
||||
bugs
|
||||
|
||||
2016-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit 723fa5dfed5bb198c66741c594e2c277ded88970 Author: rocky
|
||||
<rb@dustyfeet.com> Date: Wed Dec 28 18:57:09 2016 -0500
|
||||
|
||||
2016-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse32.py,
|
||||
uncompyle6/parsers/parse33.py: Towards fixing a 3.2 while true: ...
|
||||
break bug
|
||||
|
||||
2016-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, uncompyle6/main.py, uncompyle6/parsers/parse26.py,
|
||||
uncompyle6/verify.py: Bugs in Python 2.6- "and" and "lambda"
|
||||
handling .. and clean up verify output
|
||||
|
||||
2016-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/semantics/pysource.py:
|
||||
WIP : Add THEN to disambigute from "and"
|
||||
|
||||
2016-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner2.py: Make 2.6 and 2.7 ingest more
|
||||
alike
|
||||
|
||||
2016-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : Update 2.7 bytecode file for last fix
|
||||
|
||||
2016-12-26 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #71 from jiangpengcheng/tupple_bug tupples which contain only 1 element need a comma
|
||||
|
||||
2016-12-26 jiangpch <jiangpch@gohighsec.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: tupples which contain only 1
|
||||
element need a comma
|
||||
|
||||
2016-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse25.py: fix bug in using python2 AST rules
|
||||
in python 2.5
|
||||
|
||||
2016-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit f1a947f106b231fb1480ba301b15e3ceaf78c94f Author: rocky
|
||||
<rb@dustyfeet.com> Date: Mon Dec 26 00:43:02 2016 -0500
|
||||
|
||||
2016-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner23.py,
|
||||
uncompyle6/scanners/scanner24.py, uncompyle6/semantics/pysource.py,
|
||||
uncompyle6/verify.py: Scanner call fixes. NAME_MODULE removal for
|
||||
<=2.4
|
||||
|
||||
2016-12-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/astnode.py, uncompyle6/parsers/parse2.py,
|
||||
uncompyle6/parsers/parse26.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse36.py, uncompyle6/scanners/scanner15.py,
|
||||
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner21.py,
|
||||
uncompyle6/scanners/scanner22.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
Lint
|
||||
|
||||
2016-12-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Remove stray debug hook
|
||||
|
||||
2016-12-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Bang on 3.6
|
||||
build_map_unpack_with_call Probably will fix better in the future.
|
||||
|
||||
2016-12-18 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/bin/pydisassemble.py, uncompyle6/bin/uncompile.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse25.py,
|
||||
uncompyle6/parsers/parse27.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py:
|
||||
Python flake8 crap Was testing realgud's C-x!8 (goto flake8 warning/error)
|
||||
|
||||
2016-12-18 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/.gitignore, test/simple_source/bug25/02_try_else.py,
|
||||
uncompyle6/parsers/parse25.py, uncompyle6/parsers/parse26.py: Python
|
||||
2.5 mistaken try/else
|
||||
|
||||
2016-12-17 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner25.py:
|
||||
show-asm on python2.5 is optional make scanner2 look a little more like scanner3
|
||||
|
||||
2016-12-16 rocky <rb@dustyfeet.com>
|
||||
|
||||
* NEWS: Release 2.9.8 news
|
||||
|
||||
2016-12-16 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, uncompyle6/version.py: Get ready for release 2.9.8
|
||||
|
||||
2016-12-16 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug35/02_build_map_unpack_with_call.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py,
|
||||
uncompyle6/parsers/parse36.py, uncompyle6/scanners/scanner3.py,
|
||||
uncompyle6/semantics/pysource.py: Start to handle 3.5
|
||||
build_map_unpack_with_call 3.6 also started but needs even more work
|
||||
|
||||
2016-12-15 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanner.py, uncompyle6/scanners/scanner3.py: Some
|
||||
Python 3.6 bytecode->wordcode fixes
|
||||
|
||||
2016-12-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py: Was passing wrong type
|
||||
|
||||
2016-12-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parser.py: option -g: show start-end range when
|
||||
possible
|
||||
|
||||
2016-12-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/make_function.py, uncompyle6/verify.py: two
|
||||
misc changes - track print_docstring move to help (used in python 3.1) - verify: allow RETURN_VALUE to match RETURN_END_IF
|
||||
|
||||
2016-12-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml, test/Makefile: 3.2 needs --weak-verify
|
||||
|
||||
2016-12-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml: Try testing on 3.2
|
||||
|
||||
2016-12-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, uncompyle6/bin/uncompile.py: Can run in Python 3.1
|
||||
and Python 3.2
|
||||
|
||||
2016-12-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanners/scanner3.py: Another python 3 ELSE fixes and ... Makefile: - test python 3.0 bytecode - turn full --verify back on Python 3.x
|
||||
|
||||
2016-12-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Another faulty Python3 ELSE tag
|
||||
remove
|
||||
|
||||
2016-12-09 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_grammar.py: Grammar check: ELSE on RHS is ok.
|
||||
|
||||
2016-12-09 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/tok.py, uncompyle6/verify.py: Back of some of
|
||||
the verification changes
|
||||
|
||||
2016-12-09 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit a5d2237435ee51e681c73db9e7ea379d56456205 Author: rocky
|
||||
<rb@dustyfeet.com> Date: Fri Dec 9 21:10:10 2016 -0500
|
||||
|
||||
2016-12-04 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, uncompyle6/main.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse26.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse34.py, uncompyle6/parsers/parse35.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner23.py, uncompyle6/scanners/scanner24.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/tok.py,
|
||||
uncompyle6/semantics/make_function.py,
|
||||
uncompyle6/semantics/pysource.py, uncompyle6/verify.py,
|
||||
uncompyle6/version.py: Get ready for release 2.9.7 Some of the many lint things. Linting is kind of stupid though.
|
||||
|
||||
2016-11-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse36.py:
|
||||
Shorten Python3 grammars with + and *
|
||||
|
||||
2016-11-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py: Try new spark 2.5.1 grammar syntax
|
||||
shortcuts This package I now declare stable
|
||||
|
||||
2016-11-28 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* README.rst: Update README.rst
|
||||
|
||||
2016-11-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: Limitations of decompiling control structures.
|
||||
|
||||
2016-11-27 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #69 from rocky/ast-reduce-checks AST reduce checks
|
||||
|
||||
2016-11-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug26/03_elif_vs_continue.py,
|
||||
uncompyle6/main.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py: Misc changes scanner26.py: make scanner2.py and scanner26.py more alike
|
||||
scanner2.py: check that return stmt is last in list. (May change)
|
||||
main.py: show filename on verify error test/*: add more
|
||||
|
||||
2016-11-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, test/Makefile, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py: Start
|
||||
grammar reduction checks
|
||||
|
||||
2016-11-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/semantics/helper.py, uncompyle6/semantics/pysource.py:
|
||||
2.7 grammar bug workaround. Fix docstring bug
|
||||
|
||||
2016-11-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Better line number tracking Indent Python 2 list comprehensions, albeit badly. DRY code a
|
||||
little via indent_if_source_nl
|
||||
|
||||
2016-11-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py:
|
||||
<2.7 "if" detection and dup Python 3 grammar rule
|
||||
|
||||
2016-11-23 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, pytest/test_grammar.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse26.py: Python 2.6 grammary bug and.. __pkginfo.py__: Bump spark_parser version for parse_flags 'dups'
|
||||
|
||||
2016-11-23 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py: Note that we now work on 2.4 and 2.5
|
||||
|
||||
2016-11-23 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit 6aa1531972de83ecab15b4c96b89c873ea5a7458 Author: rocky
|
||||
<rb@dustyfeet.com> Date: Wed Nov 23 00:48:38 2016 -0500
|
||||
|
||||
2016-11-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse32.py,
|
||||
uncompyle6/parsers/parse33.py, uncompyle6/parsers/parse34.py,
|
||||
uncompyle6/parsers/parse35.py: DRY Python3 grammar
|
||||
|
||||
2016-11-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse27.py,
|
||||
uncompyle6/scanners/scanner2.py: More detailed COME_FROMs For now we only add COME_FROM_FINALLY and COME_FROM_WITH and even
|
||||
here only on 2.7
|
||||
|
||||
2016-11-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* circle.yml, pytest/test_grammar.py, tox.ini,
|
||||
uncompyle6/parser.py, uncompyle6/parsers/parse2.py,
|
||||
uncompyle6/parsers/parse27.py: Remove redundant 2.7 (and 2.x)
|
||||
grammar rules
|
||||
|
||||
2016-11-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_docstring.py, uncompyle6/linenumbers.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/helper.py,
|
||||
uncompyle6/semantics/make_function.py,
|
||||
uncompyle6/semantics/pysource.py: Split out print_docstring move from pysource.py to new helper.py
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, uncompyle6/version.py: Get ready for release
|
||||
2.9.6
|
||||
|
||||
2016-11-20 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #68 from rocky/line-mappings Line mappings
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : Merge remote-tracking branch 'origin' into line-mappings
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse27.py: Back off a test. That means bugs in 2.7 still not fixed. Sigh.
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_fjt.py, uncompyle6/parsers/parse27.py,
|
||||
uncompyle6/scanners/scanner2.py: more 2.7 control flow bug fixing
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner26.py: Pass debug in scanner26
|
||||
find_targets
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Add debug option on Python 3
|
||||
find_jump_targets()
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: A little closesr in PyPy 2.7
|
||||
list comprehensions pysource.py: note need to handle line breaks in list comprehensions
|
||||
|
||||
2016-11-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_fjt.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py:
|
||||
Start to improve detect_structure for 2.7 and 2.x Add debug flag to find_jump_targets to show the structure we found.
|
||||
When there are control-flow bugs, it's often reflected here. scanner3.py: make code make more similar to 2.x code
|
||||
|
||||
2016-11-18 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit d7f898b4fbf79d1f66eabadb25f0f9f0f38730cb Author: rocky
|
||||
<rb@dustyfeet.com> Date: Fri Nov 18 09:02:00 2016 -0500
|
||||
|
||||
2016-11-17 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #67 from rocky/2.6-cf-ignore-if 2.6 cf ignore if
|
||||
|
||||
2016-11-16 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug26/03_if_vs_and.py, uncompyle6/main.py,
|
||||
uncompyle6/semantics/check_ast.py, uncompyle6/semantics/pysource.py:
|
||||
More AST checking Small fixes in output format
|
||||
|
||||
2016-11-15 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse23.py, uncompyle6/parsers/parse26.py,
|
||||
uncompyle6/scanners/scanner2.py: WIP Grammar changes - reinstatng
|
||||
COME_FROMs around ignore_if's
|
||||
|
||||
2016-11-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* MANIFEST.in: Revise MANIFEST.in with what we have
|
||||
|
||||
2016-11-15 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit 0f719d41fdf08d41de594abb1664ab42ff92bbdf Author: rocky
|
||||
<rb@dustyfeet.com> Date: Mon Nov 14 20:20:07 2016 -0500
|
||||
|
||||
2016-11-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py:
|
||||
WIP remove COME_FROMs around ignore_if's
|
||||
|
||||
2016-11-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py:
|
||||
WIP remove COME_FROMs around ignore_if's
|
||||
|
||||
2016-11-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py:
|
||||
Show line numbers in 2.6 "after" asm .. start to understand some of the Python 2.6 bytecode parse failures.
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst, uncompyle6/verify.py: Handle verify syntax errors... Update README.rst stats
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* setup.py: Administrivia: Fixes #66
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, uncompyle6/version.py: Get ready for release
|
||||
2.9.5
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse30.py,
|
||||
uncompyle6/semantics/make_function.py: Python 3 bugs ... - Was using "while 1 .. else" improperly - docstring indent bug: was indenting docstring improperly
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: Revise what works and what doesn't
|
||||
|
||||
2016-11-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug30/02_while1_if_while1.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse30.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Python 3.0 while1 if bug... Is a workaround. We really need more tagging in of SETUP_LOOP and
|
||||
COME_FROM.
|
||||
|
||||
2016-11-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/semantics/check_ast.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
Revert augassign change but.. Make note of what's going on and add grammar test for bad situations
|
||||
we have in Python 2.6 (and perhaps others)
|
||||
|
||||
2016-11-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/test_pyenvlib.py, uncompyle6/parser.py,
|
||||
uncompyle6/semantics/pysource.py: augassign semantic action bug
|
||||
|
||||
2016-11-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug33/02_pos_args.py,
|
||||
test/simple_source/bug33/03_func_params.py,
|
||||
uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/make_function.py: Bug in detecting 3.3 default
|
||||
value in lambda
|
||||
|
||||
2016-11-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py, uncompyle6/semantics/check_ast.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
Detect some erroneous decompilations Until we can actually prevent these in grammar rules, we will warn
|
||||
of improper decompilations. Also, we now stop when we hit a decompile error. Previously we were
|
||||
not.
|
||||
|
||||
2016-11-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Remove unused imports
|
||||
|
||||
2016-11-07 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse30.py,
|
||||
uncompyle6/parsers/parse32.py: Possiby tidy grammar
|
||||
|
||||
2016-11-06 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py: Bump xdis to get correct 3.0 bytecodes
|
||||
|
||||
2016-11-06 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse33.py, uncompyle6/parsers/parse34.py: Some
|
||||
Python 3.4 grammar rules apply to Python 3.3
|
||||
|
||||
2016-11-06 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/test_pythonlib.py,
|
||||
uncompyle6/parsers/parse30.py: Start bytecode 3.0 decompiling
|
||||
|
||||
2016-11-06 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse30.py, uncompyle6/scanners/scanner3.py,
|
||||
uncompyle6/scanners/scanner30.py: Python 3.0 doesn't have POP_JUMP
|
||||
ops... In some ways Python 3.0 code generation is more like Python 2.6 (and
|
||||
before) than it is Python 2.7 or 3.0.
|
||||
|
||||
2016-11-05 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #63 from rocky/python-3.0 Python 3.0
|
||||
|
||||
2016-11-05 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit cd3cf5ec2960a733e9fedca9c4549caf33c2d1d0 Author: rocky
|
||||
<rb@dustyfeet.com> Date: Thu Nov 3 21:26:12 2016 -0400
|
||||
|
||||
2016-11-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py, uncompyle6/version.py: Get ready
|
||||
for release 2.9.4
|
||||
|
||||
2016-11-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: Update unpyc3 info.
|
||||
|
||||
2016-11-01 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_grammar.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse31.py, uncompyle6/parsers/parse32.py,
|
||||
uncompyle6/semantics/make_function.py: Clean up annotation grammar a
|
||||
little
|
||||
|
||||
2016-11-01 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug31/04_def_annotate.py,
|
||||
uncompyle6/semantics/make_function.py: Full Python 3 annotations
|
||||
|
||||
2016-10-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .gitignore, README.rst, test/simple_source/def/03_class_method.py:
|
||||
Note github unpyc3 and.. - Add source to bytecode_2.2/03_class_method.pyc - more ignore
|
||||
|
||||
2016-10-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/make_function.py: More source-code line
|
||||
indention in make_function.. and remove Python 3 situations from make_function2()
|
||||
|
||||
2016-10-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/make_function.py,
|
||||
uncompyle6/semantics/pysource.py: More annotation processing in to
|
||||
make_function Move return-value annotation determination from n_mkfunc_annotate to
|
||||
make_function_annotate which is where other kinds of annotation
|
||||
handling will also need to be done.
|
||||
|
||||
2016-10-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/make_function.py,
|
||||
uncompyle6/semantics/parser_error.py,
|
||||
uncompyle6/semantics/pysource.py: Break out make_function() into its
|
||||
own file. It is already too complex and will get worse in Python 3.6. Note: make_function in fragments.py is still inside and probably
|
||||
needs fixup.
|
||||
|
||||
2016-10-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_grammar.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse31.py, uncompyle6/parsers/parse32.py,
|
||||
uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.py:
|
||||
More complete annotate handling Still have a bit of work to do though.
|
||||
|
||||
2016-10-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_grammar.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse32.py, uncompyle6/parsers/parse33.py,
|
||||
uncompyle6/parsers/parse34.py, uncompyle6/semantics/pysource.py:
|
||||
Expand annotate return to Python 3.4
|
||||
|
||||
2016-10-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_grammar.py, uncompyle6/parsers/parse31.py,
|
||||
uncompyle6/parsers/parse32.py, uncompyle6/semantics/pysource.py:
|
||||
Expand annotate handling to 3.3 (and possibly 3.2) - DRY Python 3.1-3.3 grammar a little
|
||||
|
||||
2016-10-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse31.py, uncompyle6/parsers/parse32.py,
|
||||
uncompyle6/parsers/parse33.py, uncompyle6/parsers/parse35.py: Split
|
||||
out 3.1-3.3 parsers from parser3.py This is anticipation of extending annotation to Python 3.2+
|
||||
|
||||
2016-10-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug31/04_def_annotate.py,
|
||||
test/simple_source/bug31/04_def_attr.py,
|
||||
uncompyle6/parsers/parse31.py, uncompyle6/semantics/pysource.py:
|
||||
Clean and fix Python 3 annotate arg return
|
||||
|
||||
2016-10-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py: Dependencies stay within 2nd semantic level
|
||||
|
||||
2016-10-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, uncompyle6/version.py: Get ready for release
|
||||
2.9.3
|
||||
|
||||
2016-10-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/bug31/04_def_attr.py,
|
||||
uncompyle6/parsers/parse31.py, uncompyle6/scanner.py,
|
||||
uncompyle6/semantics/pysource.py: Start to attack Python 3.1 def()
|
||||
-> xx construct Start to localize make_function routines by Python version
|
||||
|
||||
2016-10-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse31.py: Split
|
||||
out Python 3.1 parser from rest. __pkginfo__.py: use Python 3.1 bytecode fixes
|
||||
|
||||
2016-10-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Handle Python 3.1 "with ... as"
|
||||
statement
|
||||
|
||||
2016-10-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile: Add python 3.1 bytecode testing
|
||||
|
||||
2016-10-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/stmts/07_withstmt_fn.py,
|
||||
uncompyle6/parsers/parse3.py: Python 3.1 "with" statement bug
|
||||
|
||||
2016-10-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse34.py,
|
||||
uncompyle6/parsers/parse35.py: Python 3.1 compile bug. DRY Python
|
||||
3.x rules ... via inheritance
|
||||
|
||||
2016-10-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Fix
|
||||
some Python 3.1 bugs
|
||||
|
||||
2016-10-24 rocky <rb@dustyfeet.com>
|
||||
|
||||
* Makefile, test/Makefile, test/test_pyenvlib.py,
|
||||
uncompyle6/bin/uncompile.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/scanner.py,
|
||||
uncompyle6/scanners/scanner3.py: Start Python 3.0 decoding Fix some Python 3.1 bugs
|
||||
|
||||
2016-10-22 Daniel Bradburn <moagstar@gmail.com>
|
||||
|
||||
* : Merge pull request #60 from rocky/buildstring Buildstring
|
||||
|
||||
2016-10-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_fstring.py, test/simple_source/bug36/01_fstring.py,
|
||||
uncompyle6/semantics/pysource.py: Move fstring rules inside a 3.6+
|
||||
check
|
||||
|
||||
2016-10-22 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit d6f7ef4e178e04d9a612d3a6c0b77a008732357f Author: rocky
|
||||
<rb@dustyfeet.com> Date: Fri Oct 21 07:40:35 2016 -0400
|
||||
|
||||
2016-10-20 moagstar <moagstar@gmail.com>
|
||||
|
||||
* pytest/test_fstring.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse36.py, uncompyle6/semantics/pysource.py:
|
||||
further work on supporting single and multiple fstring decompilation
|
||||
|
||||
2016-10-20 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py: DRY Python 2.x unmangle_classname main.py: small typo: Disassembled -> Decompiled
|
||||
|
||||
2016-10-19 moagstar <moagstar@gmail.com>
|
||||
|
||||
* pytest/test_fstring.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/parsers/parse36.py, uncompyle6/semantics/pysource.py:
|
||||
urther work on fstrings for python 3.6 - there is a new opcode
|
||||
build_string which is used to improve fstring performance, but broke
|
||||
the fstring support in uncompyle
|
||||
|
||||
2016-10-15 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py: Change meta data info in uncompyle6: * Show file size of source when possible, i.e. in Python 3.x * Show full information about python interpreter used to decompile
|
||||
|
||||
2016-10-15 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py, requirements.txt,
|
||||
uncompyle6/version.py: Get ready for release 2.9.2
|
||||
|
||||
2016-10-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit a7ef513849cc2564b35636d3865561242e46e63f Author: rocky
|
||||
<rb@dustyfeet.com> Date: Fri Oct 14 21:34:55 2016 -0400
|
||||
|
||||
2016-10-14 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py: Python 2.6- _ifstmst_jump bug
|
||||
|
||||
2016-10-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Pretty-print constant tuples
|
||||
|
||||
2016-10-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py: 2.6 and before: try_middle
|
||||
come_from per except
|
||||
|
||||
2016-10-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py,
|
||||
uncompyle6/scanners/scanner26.py: 2.6 try statement (and below) They may neeed arbitrary come_froms for each except clause
|
||||
|
||||
2016-10-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/pysource.py: Bug in handling kv, kv2
|
||||
|
||||
2016-10-13 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/stmts/08_source_linebreaks.py,
|
||||
uncompyle6/semantics/pysource.py: Start to track line breaks on
|
||||
lists
|
||||
|
||||
2016-10-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: DRY fragments.py preorder code pysource.py: doc typo
|
||||
|
||||
2016-10-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, requirements.txt: Need xdis 3.0.2 for Python 1.5
|
||||
bug fixes
|
||||
|
||||
2016-10-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, requirements.txt, test/Makefile,
|
||||
test/test_pythonlib.py, uncompyle6/scanners/scanner26.py: Fix Python
|
||||
1.5 bytecode deparse Need xdis 3.0.2 though since the bug is really there.
|
||||
|
||||
2016-10-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/test_pythonlib.py,
|
||||
uncompyle6/scanners/scanner26.py: Fix python 1.5 decompile bugs ... add bytecode 1.5 tests from decompyle
|
||||
|
||||
2016-10-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* __pkginfo__.py, requirements.txt, uncompyle6/disas.py,
|
||||
uncompyle6/main.py, uncompyle6/parser.py,
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Map expression with
|
||||
source-directed linebreaks ... for Python 3.4 and 3.5
|
||||
|
||||
2016-10-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Start using source linebreaks in
|
||||
formatting... .. large literals like maps and dicts, and tuples
|
||||
|
||||
2016-10-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, README.rst, __pkginfo__.py, requirements.txt,
|
||||
uncompyle6/version.py: Get ready for release 2.9.1
|
||||
|
||||
2016-10-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse15.py, uncompyle6/scanners/scanner15.py,
|
||||
uncompyle6/semantics/pysource.py: Python 1.5 scanner and parser and
|
||||
.. .. slightly improved Forgot to check in files before. Handle Python pre 2.2. classes
|
||||
|
||||
2016-10-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py, requirements.txt,
|
||||
uncompyle6/disas.py, uncompyle6/main.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/scanner.py,
|
||||
uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py,
|
||||
uncompyle6/verify.py, uncompyle6/version.py: Get ready for release
|
||||
|
@@ -2,10 +2,16 @@ include README.rst
|
||||
include ChangeLog
|
||||
include HISTORY.md
|
||||
include LICENSE
|
||||
include Makefile
|
||||
include requirements.txt
|
||||
include requirements-dev.txt
|
||||
include DECOMPYLE-2.4-CHANGELOG.txt
|
||||
include __pkginfo__.py
|
||||
recursive-include uncompyle6 *.py
|
||||
include bin/uncompyle6
|
||||
include bin/pydisassemble
|
||||
include pytest/Makefile
|
||||
include test/Makefile
|
||||
recursive-include test *.py *.pyc
|
||||
recursive-include pytest *.py
|
||||
recursive-include pytest/testdata *
|
||||
|
2
Makefile
2
Makefile
@@ -33,7 +33,7 @@ check-2.7 check-3.3 check-3.4: pytest
|
||||
|
||||
#: Tests for Python 3.2 and 3.5 - pytest doesn't work here
|
||||
# Or rather 3.5 doesn't work not on Travis
|
||||
check-3.1 check-3.2 check-3.5 check-3.6:
|
||||
check-3.0 check-3.1 check-3.2 check-3.5 check-3.6:
|
||||
$(MAKE) -C test $@
|
||||
|
||||
#:Tests for Python 2.6 (doesn't have pytest)
|
||||
|
94
NEWS
94
NEWS
@@ -1,3 +1,97 @@
|
||||
uncompyle6 2.9.9 2016-12-16
|
||||
|
||||
- Better control-flow detection
|
||||
- pseudo instruction THEN in 2.x
|
||||
to disambiguate if from and
|
||||
- fix bug in --verify option
|
||||
- DRY (a little) control-flow detection
|
||||
- fix syntax in tuples with one element
|
||||
- if AST rule inheritence in Python 2.5
|
||||
- NAME_MODULE removal for Python <= 2.4
|
||||
- verifycall fixes for Python <= 2.4
|
||||
- more Python lint
|
||||
|
||||
uncompyle6 2.9.8 2016-12-16
|
||||
|
||||
uncompyle6 2.9.7 2016-12-16
|
||||
|
||||
- Start to handle 3.5/3.6 build_map_unpack_with_call
|
||||
- Some Python 3.6 bytecode to wordcode conversion fixes
|
||||
- option -g: show start-end range when possible
|
||||
- track print_docstring move to help (used in python 3.1)
|
||||
- verify: allow RETURN_VALUE to match RETURN_END_IF
|
||||
- some 3.2 compatibility
|
||||
- Better Python 3 control flow detection by adding Pseudo ELSE opcodes
|
||||
|
||||
uncompyle6 2.9.6 2016-12-04
|
||||
|
||||
- Shorten Python3 grammars with + and *
|
||||
this requires spark parser 1.5.1
|
||||
- Add some AST reduction checks to improve
|
||||
decompile accuracy. This too requires
|
||||
spark parser 1.5.1
|
||||
|
||||
uncompyle6 2.9.6 2016-11-20
|
||||
|
||||
- Correct MANIFEST.in
|
||||
- More AST grammar checking
|
||||
- --linemapping option or linenumbers.line_number_mapping()
|
||||
Shows correspondence of lines between source
|
||||
and decompiled source
|
||||
- Some control flow adjustments in code for 2.x.
|
||||
This is probably an improvement in 2.6 and before.
|
||||
For 2.7 things are just shuffled around a little. Sigh.
|
||||
Overall I think we are getting more precise in
|
||||
or analysis even if it is not always reflected
|
||||
in the results.
|
||||
- better control flow debugging output
|
||||
- Python 2 and 3 detect structure code is more similar
|
||||
- Handle Docstrings with embedded tiple quotes (""")
|
||||
|
||||
uncompyle6 2.9.5 2016-11-13
|
||||
|
||||
- Fix Python 3 bugs:
|
||||
* improprer while 1 else
|
||||
* docstring indent
|
||||
* 3.3 default values in lambda expressions
|
||||
* start 3.0 decompilation (needs newer xdis)
|
||||
- Start grammar misparse checking
|
||||
|
||||
|
||||
uncompyle6 2.9.4 2016-11-02
|
||||
|
||||
- Handle Python 3.x function annotations
|
||||
- track def keywoard-parameter line-splitting in source code better
|
||||
- bump min xdis version to mask previous xdis bug
|
||||
|
||||
uncompyle6 2.9.3 2016-10-26
|
||||
|
||||
Release forced by incompatiblity change in xdis 3.2.0.
|
||||
|
||||
- Python 3.1 bugs:
|
||||
* handle "with ... as"
|
||||
* handle "with"
|
||||
* Start handling def (...) -> yy (has bugs still)
|
||||
|
||||
- DRY Python 3.x via inheritance
|
||||
- Python 3.6 work (from Daniel Bradburn)
|
||||
* Handle 3.6 buildstring
|
||||
* Handle 3.6 handle single and multiple fstring better
|
||||
|
||||
|
||||
uncompyle6 2.9.2 2016-10-15
|
||||
|
||||
- use source-code line breaks to assist in where to break
|
||||
in tuples and maps
|
||||
- Fix Python 1.5 decompyle bugs
|
||||
- Fix some Python 2.6 and below bugs
|
||||
- DRY fragments.py code a little
|
||||
|
||||
uncompyle6 2.9.1 2016-10-09
|
||||
|
||||
- Improved Python 1.5 decompiling
|
||||
- Handle old-style pre Python 2.2 classes
|
||||
|
||||
uncompyle6 2.9.0 2016-10-09
|
||||
|
||||
- Use xdis 3.0.0 protocol load_module.
|
||||
|
71
README.rst
71
README.rst
@@ -1,4 +1,4 @@
|
||||
|buildstatus|
|
||||
|buildstatus| |Supported Python Versions|
|
||||
|
||||
uncompyle6
|
||||
==========
|
||||
@@ -20,9 +20,9 @@ Why this?
|
||||
There were a number of decompyle, uncompile, uncompyle2, uncompyle3
|
||||
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.
|
||||
handled Python 3, and even there, only 3.2 or 3.3 depending on which
|
||||
code is used. 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
|
||||
ability to deparse just fragments and give source-code information
|
||||
@@ -43,7 +43,8 @@ information.
|
||||
Requirements
|
||||
------------
|
||||
|
||||
This project requires Python 2.6 or later, PyPy 3-2.4, or PyPy-5.0.1.
|
||||
This project requires Python 2.6 or later, PyPy 3-2.4, or PyPy-5.0.1.
|
||||
Python versions 2.3-2.7 are supported in the python-2.4 branch.
|
||||
The bytecode files it can read has been tested on Python bytecodes from
|
||||
versions 2.1-2.7, and 3.2-3.6 and the above-mentioned PyPy versions.
|
||||
|
||||
@@ -96,21 +97,54 @@ For usage help:
|
||||
Known Bugs/Restrictions
|
||||
-----------------------
|
||||
|
||||
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.
|
||||
The biggest known and possibly fixable (but hard) problem has to do
|
||||
with handling control flow. All of the Python decompilers I have looked
|
||||
at have the same problem. In some cases we can detect an erroneous
|
||||
decompilation and report that.
|
||||
|
||||
(Verification is the process of decompiling bytecode, compiling with a
|
||||
Python for that byecode version, and then comparing the byetcode
|
||||
About 90% of the decompilation of Python standard library packages in
|
||||
Python 2.7.12 verifies correctly. Over 99% of Python 2.7 and 3.3-3.5
|
||||
"weakly" verify. Python 2.6 drops down to 96% weakly verifying.
|
||||
Other versions drop off in quality too.
|
||||
|
||||
*Verification* is the process of decompiling bytecode, compiling with
|
||||
a Python for that bytecode version, and then comparing the bytecode
|
||||
produced by the decompiled/compiled program. Some allowance is made
|
||||
for inessential differences.)
|
||||
for inessential differences. But other semantically equivalent
|
||||
differences are not caught. For example ``1 and 0`` is decompiled to
|
||||
the equivalent ``0``; remnants of the first true evaluation (1) is
|
||||
lost when Python compiles this. When Python next compiles ``0`` the
|
||||
resulting code is simpler.
|
||||
|
||||
Later distributions average about 200 files. At this point, 2.7
|
||||
decompilation is better than uncompyle2. A number of bugs have been
|
||||
fixed.
|
||||
*Weak Verification*
|
||||
on the other hand doesn't check bytecode for equivalence but does
|
||||
check to see if the resulting decompiled source is a valid Python
|
||||
program by running the Python interpreter. Because the Python language
|
||||
has changed so much, for best results you should use the same Python
|
||||
Version in checking as used in the bytecode.
|
||||
|
||||
Later distributions average about 200 files. There is some work to do
|
||||
on the lower end Python versions which is more difficult for us to
|
||||
handle since we don't have a Python interpreter for versions 1.5, 1.6,
|
||||
and 2.0.
|
||||
|
||||
Python 3.0 support is weak; 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. That has been addressed, but then it also
|
||||
changes function call opcodes and its semantics.
|
||||
|
||||
Currently not all Python magic numbers are supported. Specifically in
|
||||
some versions of Python, notably Python 3.6, the magic number has
|
||||
changes several times within a version. We support only the released
|
||||
magic. There are also customized Python interpreters, notably Dropbox,
|
||||
which use their own magic and encrypt bytcode. With the exception of
|
||||
the Dropbox's old Python 2.5 interpreter this kind of thing is not
|
||||
handled.
|
||||
|
||||
We also don't handle PJOrion_ obfuscated code. For that try: PJOrion
|
||||
Deobfuscator_ to unscramble the bytecode to get valid bytecode before
|
||||
trying this tool.
|
||||
|
||||
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, and that needs to be addressed.
|
||||
|
||||
There is lots to do, so please dig in and help.
|
||||
|
||||
@@ -119,6 +153,7 @@ 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.
|
||||
* https://github.com/figment/unpyc3/ : fork of above, but supports Python 3.3 only. Include some fixes like supporting function annotations
|
||||
* The HISTORY_ file.
|
||||
|
||||
.. |downloads| image:: https://img.shields.io/pypi/dd/uncompyle6.svg
|
||||
@@ -130,3 +165,7 @@ See Also
|
||||
.. _this: https://github.com/rocky/python-uncompyle6/wiki/Deparsing-technology-and-its-use-in-exact-location-reporting
|
||||
.. |buildstatus| image:: https://travis-ci.org/rocky/python-uncompyle6.svg
|
||||
:target: https://travis-ci.org/rocky/python-uncompyle6
|
||||
.. |Supported Python Versions| image:: https://img.shields.io/pypi/pyversions/uncompyle6.svg
|
||||
:target: https://pypi.python.org/pypi/uncompyle6/
|
||||
.. _PJOrion: http://www.koreanrandom.com/forum/topic/15280-pjorion-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%B4%D0%B5%D0%BA%D0%BE%D0%BC%D0%BF%D0%B8%D0%BB%D1%8F%D1%86%D0%B8%D1%8F-%D0%BE%D0%B1%D1%84
|
||||
.. _Deobfuscator: https://github.com/extremecoders-re/PjOrion-Deobfuscator
|
||||
|
@@ -12,14 +12,16 @@ copyright = """
|
||||
Copyright (C) 2015, 2016 Rocky Bernstein <rb@dustyfeet.com>.
|
||||
"""
|
||||
|
||||
classifiers = ['Development Status :: 4 - Beta',
|
||||
classifiers = ['Development Status :: 5 - Production/Stable',
|
||||
'Intended Audience :: Developers',
|
||||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 2',
|
||||
'Programming Language :: Python :: 2.4',
|
||||
'Programming Language :: Python :: 2.5',
|
||||
'Programming Language :: Python :: 2.6',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.1',
|
||||
'Programming Language :: Python :: 3.2',
|
||||
'Programming Language :: Python :: 3.3',
|
||||
'Programming Language :: Python :: 3.4',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
@@ -37,8 +39,8 @@ entry_points={
|
||||
'pydisassemble=uncompyle6.bin.pydisassemble:main',
|
||||
]}
|
||||
ftp_url = None
|
||||
install_requires = ['spark-parser >= 1.4.0',
|
||||
'xdis >= 3.0.0']
|
||||
install_requires = ['spark-parser >= 1.5.1, < 1.6.0',
|
||||
'xdis >= 3.2.4, < 3.3.0']
|
||||
license = 'MIT'
|
||||
mailing_list = 'python-debugger@googlegroups.com'
|
||||
modname = 'uncompyle6'
|
||||
|
@@ -1,6 +1,6 @@
|
||||
machine:
|
||||
python:
|
||||
version: 2.7.8
|
||||
version: 2.7.10
|
||||
environment:
|
||||
COMPILE: --compile
|
||||
|
||||
|
1
pytest/.gitignore
vendored
1
pytest/.gitignore
vendored
@@ -1 +1,2 @@
|
||||
/.hypothesis
|
||||
/__pycache__
|
||||
|
78
pytest/test_docstring.py
Normal file
78
pytest/test_docstring.py
Normal file
@@ -0,0 +1,78 @@
|
||||
import sys
|
||||
from uncompyle6 import PYTHON3
|
||||
if PYTHON3:
|
||||
from io import StringIO
|
||||
minint = -sys.maxsize-1
|
||||
maxint = sys.maxsize
|
||||
else:
|
||||
from StringIO import StringIO
|
||||
minint = -sys.maxint-1
|
||||
maxint = sys.maxint
|
||||
from uncompyle6.semantics.helper import print_docstring
|
||||
|
||||
class PrintFake():
|
||||
def __init__(self):
|
||||
self.pending_newlines = 0
|
||||
self.f = StringIO()
|
||||
|
||||
def write(self, *data):
|
||||
if (len(data) == 0) or (len(data) == 1 and data[0] == ''):
|
||||
return
|
||||
out = ''.join((str(j) for j in data))
|
||||
n = 0
|
||||
for i in out:
|
||||
if i == '\n':
|
||||
n += 1
|
||||
if n == len(out):
|
||||
self.pending_newlines = max(self.pending_newlines, n)
|
||||
return
|
||||
elif n:
|
||||
self.pending_newlines = max(self.pending_newlines, n)
|
||||
out = out[n:]
|
||||
break
|
||||
else:
|
||||
break
|
||||
|
||||
if self.pending_newlines > 0:
|
||||
self.f.write('\n'*self.pending_newlines)
|
||||
self.pending_newlines = 0
|
||||
|
||||
for i in out[::-1]:
|
||||
if i == '\n':
|
||||
self.pending_newlines += 1
|
||||
else:
|
||||
break
|
||||
|
||||
if self.pending_newlines:
|
||||
out = out[:-self.pending_newlines]
|
||||
self.f.write(out)
|
||||
def println(self, *data):
|
||||
if data and not(len(data) == 1 and data[0] ==''):
|
||||
self.write(*data)
|
||||
self.pending_newlines = max(self.pending_newlines, 1)
|
||||
return
|
||||
pass
|
||||
|
||||
def test_docstring():
|
||||
|
||||
for doc, expect in (
|
||||
("Now is the time",
|
||||
' """Now is the time"""'),
|
||||
("""
|
||||
Now is the time
|
||||
""",
|
||||
''' """
|
||||
Now is the time
|
||||
"""''')
|
||||
|
||||
# (r'''func placeholder - ' and with ("""\nstring\n """)''',
|
||||
# """ r'''func placeholder - ' and with (\"\"\"\nstring\n\"\"\")'''"""),
|
||||
# (r"""func placeholder - ' and with ('''\nstring\n''') and \"\"\"\nstring\n\"\"\" """,
|
||||
# """ r\"\"\"func placeholder - ' and with ('''\nstring\n''') and \"\"\"\nstring\n\"\"\" \"\"\"""")
|
||||
):
|
||||
|
||||
o = PrintFake()
|
||||
# print(doc)
|
||||
# print(expect)
|
||||
print_docstring(o, ' ', doc)
|
||||
assert expect == o.f.getvalue()
|
@@ -8,6 +8,18 @@ def bug(state, slotstate):
|
||||
for key, value in slotstate.items():
|
||||
setattr(state, key, 2)
|
||||
|
||||
# From 2.7 disassemble
|
||||
# Problem is not getting while, because
|
||||
# COME_FROM not added
|
||||
def bug_loop(disassemble, tb=None):
|
||||
if tb:
|
||||
try:
|
||||
tb = 5
|
||||
except AttributeError:
|
||||
raise RuntimeError
|
||||
while tb: tb = tb.tb_next
|
||||
disassemble(tb)
|
||||
|
||||
def test_if_in_for():
|
||||
code = bug.__code__
|
||||
scan = get_scanner(PYTHON_VERSION)
|
||||
@@ -16,18 +28,35 @@ def test_if_in_for():
|
||||
n = scan.setup_code(code)
|
||||
scan.build_lines_data(code, n)
|
||||
scan.build_prev_op(n)
|
||||
fjt = scan.find_jump_targets()
|
||||
fjt = scan.find_jump_targets(False)
|
||||
assert {15: [3], 69: [66], 63: [18]} == fjt
|
||||
assert scan.structs == \
|
||||
[{'start': 0, 'end': 72, 'type': 'root'},
|
||||
{'start': 18, 'end': 66, 'type': 'if-then'},
|
||||
{'start': 15, 'end': 66, 'type': 'if-then'},
|
||||
{'start': 31, 'end': 59, 'type': 'for-loop'},
|
||||
{'start': 62, 'end': 63, 'type': 'for-else'}]
|
||||
|
||||
code = bug_loop.__code__
|
||||
n = scan.setup_code(code)
|
||||
scan.build_lines_data(code, n)
|
||||
scan.build_prev_op(n)
|
||||
fjt = scan.find_jump_targets(False)
|
||||
assert{64: [42], 67: [42, 42], 42: [16, 41], 19: [6]} == fjt
|
||||
assert scan.structs == [
|
||||
{'start': 0, 'end': 80, 'type': 'root'},
|
||||
{'start': 3, 'end': 64, 'type': 'if-then'},
|
||||
{'start': 6, 'end': 15, 'type': 'try'},
|
||||
{'start': 19, 'end': 38, 'type': 'except'},
|
||||
{'start': 45, 'end': 67, 'type': 'while-loop'},
|
||||
{'start': 70, 'end': 64, 'type': 'while-else'},
|
||||
# previous bug was not mistaking while-loop for if-then
|
||||
{'start': 48, 'end': 67, 'type': 'while-loop'}]
|
||||
|
||||
elif 3.2 < PYTHON_VERSION <= 3.4:
|
||||
scan.code = array('B', code.co_code)
|
||||
scan.build_lines_data(code)
|
||||
scan.build_prev_op()
|
||||
fjt = scan.find_jump_targets()
|
||||
fjt = scan.find_jump_targets(False)
|
||||
assert {69: [66], 63: [18]} == fjt
|
||||
assert scan.structs == \
|
||||
[{'end': 72, 'type': 'root', 'start': 0},
|
||||
|
@@ -21,9 +21,13 @@ def expressions(draw):
|
||||
'container',
|
||||
'self.attribute',
|
||||
'self.method()',
|
||||
'sorted(items, key=lambda x: x.name)',
|
||||
'func(*args, **kwargs)',
|
||||
'text or default',
|
||||
# These expressions are failing, I think these are control
|
||||
# flow problems rather than problems with FORMAT_VALUE,
|
||||
# however I need to confirm this...
|
||||
#'sorted(items, key=lambda x: x.name)',
|
||||
#'func(*args, **kwargs)',
|
||||
#'text or default',
|
||||
#'43 if life_the_universe and everything else None'
|
||||
)))
|
||||
|
||||
|
||||
@@ -119,6 +123,8 @@ def test_format_specifiers(format_specifier):
|
||||
|
||||
|
||||
def run_test(text):
|
||||
hypothesis.assume(len(text))
|
||||
hypothesis.assume("f'{" in text)
|
||||
expr = text + '\n'
|
||||
code = compile(expr, '<string>', 'single')
|
||||
deparsed = deparse_code(PYTHON_VERSION, code, compile_mode='single')
|
||||
@@ -136,9 +142,9 @@ def test_uncompyle_fstring(fstring):
|
||||
|
||||
@pytest.mark.skipif(PYTHON_VERSION < 3.6, reason='need at least python 3.6')
|
||||
@pytest.mark.parametrize('fstring', [
|
||||
#"f'{abc}{abc!s}'",
|
||||
"f'{abc!s}'",
|
||||
"f'{abc}{abc!s}'",
|
||||
"f'{abc}0'",
|
||||
])
|
||||
def test_uncompyle_direct(fstring):
|
||||
"""useful for debugging"""
|
||||
run_test(fstring)
|
||||
run_test(fstring)
|
||||
|
@@ -1,6 +1,6 @@
|
||||
import pytest, re
|
||||
import re
|
||||
from uncompyle6 import PYTHON_VERSION, PYTHON3, IS_PYPY # , PYTHON_VERSION
|
||||
from uncompyle6.parser import get_python_parser
|
||||
from uncompyle6.parser import get_python_parser, python_parser
|
||||
from uncompyle6.scanner import get_scanner
|
||||
|
||||
def test_grammar():
|
||||
@@ -16,14 +16,21 @@ def test_grammar():
|
||||
p = get_python_parser(PYTHON_VERSION, is_pypy=IS_PYPY)
|
||||
lhs, rhs, tokens, right_recursive = p.checkSets()
|
||||
expect_lhs = set(['expr1024', 'pos_arg'])
|
||||
unused_rhs = set(['build_list', 'call_function', 'mkfunc', 'mklambda',
|
||||
unused_rhs = set(['build_list', 'call_function', 'mkfunc',
|
||||
'mklambda',
|
||||
'unpack', 'unpack_list'])
|
||||
expect_right_recursive = [['designList', ('designator', 'DUP_TOP', 'designList')]]
|
||||
if PYTHON3:
|
||||
expect_lhs.add('load_genexpr')
|
||||
|
||||
unused_rhs = unused_rhs.union(set("""
|
||||
except_pop_except genexpr classdefdeco2 listcomp
|
||||
""".split()))
|
||||
if 3.0 <= PYTHON_VERSION:
|
||||
expect_lhs.add("annotate_arg")
|
||||
expect_lhs.add("annotate_tuple")
|
||||
unused_rhs.add("mkfunc_annotate")
|
||||
pass
|
||||
else:
|
||||
expect_lhs.add('kwarg')
|
||||
assert expect_lhs == set(lhs)
|
||||
@@ -34,7 +41,7 @@ def test_grammar():
|
||||
"""
|
||||
JUMP_BACK CONTINUE RETURN_END_IF
|
||||
COME_FROM COME_FROM_EXCEPT COME_FROM_LOOP COME_FROM_WITH
|
||||
COME_FROM_FINALLY
|
||||
COME_FROM_FINALLY ELSE
|
||||
LOAD_GENEXPR LOAD_ASSERT LOAD_SETCOMP LOAD_DICTCOMP
|
||||
LAMBDA_MARKER RETURN_LAST
|
||||
""".split())
|
||||
@@ -43,5 +50,14 @@ def test_grammar():
|
||||
check_tokens(tokens, opcode_set)
|
||||
elif PYTHON_VERSION == 3.4:
|
||||
ignore_set.add('LOAD_CLASSNAME')
|
||||
ignore_set.add('STORE_LOCALS')
|
||||
opcode_set = set(s.opc.opname).union(ignore_set)
|
||||
check_tokens(tokens, opcode_set)
|
||||
|
||||
def test_dup_rule():
|
||||
import inspect
|
||||
python_parser(PYTHON_VERSION, inspect.currentframe().f_code,
|
||||
is_pypy=IS_PYPY,
|
||||
parser_debug={
|
||||
'dups': True, 'transition': False, 'reduce': False,
|
||||
'rules': False, 'errorstack': None, 'context': True})
|
||||
|
@@ -1,2 +1,2 @@
|
||||
spark-parser >= 1.4.0
|
||||
xdis >= 3.0.0
|
||||
# Pick up stuff from setup.py
|
||||
-e .
|
||||
|
2
setup.py
2
setup.py
@@ -24,6 +24,6 @@ setup(
|
||||
py_modules = py_modules,
|
||||
test_suite = 'nose.collector',
|
||||
url = web,
|
||||
setup_requires = ['nose>=1.0'],
|
||||
tests_require = ['nose>=1.0'],
|
||||
version = VERSION,
|
||||
zip_safe = zip_safe)
|
||||
|
@@ -20,7 +20,11 @@ check:
|
||||
$(MAKE) check-$$PYTHON_VERSION
|
||||
|
||||
#: Run working tests from Python 2.6 or 2.7
|
||||
check-2.6 check-2.7: check-bytecode-2 check-bytecode-3 check-2.7-ok
|
||||
check-2.6 check-2.7: check-bytecode-2 check-bytecode-3 check-bytecode-1 check-2.7-ok
|
||||
|
||||
#: Run working tests from Python 3.0
|
||||
check-3.0: check-bytecode
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.0 --weak-verify $(COMPILE)
|
||||
|
||||
#: Run working tests from Python 3.1
|
||||
check-3.1: check-bytecode
|
||||
@@ -32,11 +36,11 @@ check-3.2: check-bytecode
|
||||
|
||||
#: Run working tests from Python 3.3
|
||||
check-3.3: check-bytecode
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.3 --weak-verify $(COMPILE)
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.3 --verify $(COMPILE)
|
||||
|
||||
#: 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 --weak-verify $(COMPILE)
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.4 --verify $(COMPILE)
|
||||
|
||||
#: Run working tests from Python 3.5
|
||||
check-3.5: check-bytecode
|
||||
@@ -50,6 +54,10 @@ check-3.6: check-bytecode
|
||||
check-disasm:
|
||||
$(PYTHON) dis-compare.py
|
||||
|
||||
#: Check deparsing bytecode 1.x only
|
||||
check-bytecode-1:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-1.5
|
||||
|
||||
#: Check deparsing bytecode 2.x only
|
||||
check-bytecode-2:
|
||||
$(PYTHON) test_pythonlib.py \
|
||||
@@ -58,14 +66,17 @@ check-bytecode-2:
|
||||
|
||||
#: Check deparsing bytecode 3.x only
|
||||
check-bytecode-3:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.2 --bytecode-3.3 \
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.0 \
|
||||
--bytecode-3.1 --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.1 --bytecode-2.2 --bytecode-2.3 --bytecode-2.4 \
|
||||
--bytecode-2.5 --bytecode-2.6 --bytecode-2.7 --bytecode-pypy2.7
|
||||
--bytecode-2.5 --bytecode-2.6 --bytecode-2.7 \
|
||||
--bytecode-pypy2.7 --bytecode-1
|
||||
|
||||
|
||||
#: Check deparsing Python 2.1
|
||||
check-bytecode-2.1:
|
||||
@@ -89,11 +100,15 @@ check-bytecode-2.5:
|
||||
|
||||
#: Check deparsing Python 2.6
|
||||
check-bytecode-2.6:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.6
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.6 --weak-verify
|
||||
|
||||
#: Check deparsing Python 2.7
|
||||
check-bytecode-2.7:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.7
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.7 --verify
|
||||
|
||||
#: Check deparsing Python 3.0
|
||||
check-bytecode-3.0:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.0
|
||||
|
||||
#: Check deparsing Python 3.1
|
||||
check-bytecode-3.1:
|
||||
|
BIN
test/bytecode_1.5/docstring.pyc
Normal file
BIN
test/bytecode_1.5/docstring.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/exceptions.pyc
Normal file
BIN
test/bytecode_1.5/exceptions.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/exec.pyc
Normal file
BIN
test/bytecode_1.5/exec.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/expressions.pyc
Normal file
BIN
test/bytecode_1.5/expressions.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/globals.pyc
Normal file
BIN
test/bytecode_1.5/globals.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/import.pyc
Normal file
BIN
test/bytecode_1.5/import.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/lambda.pyc
Normal file
BIN
test/bytecode_1.5/lambda.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/misc.pyc
Normal file
BIN
test/bytecode_1.5/misc.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/nested_elif.pyc
Normal file
BIN
test/bytecode_1.5/nested_elif.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/print.pyc
Normal file
BIN
test/bytecode_1.5/print.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/slices.pyc
Normal file
BIN
test/bytecode_1.5/slices.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_class.pyc
Normal file
BIN
test/bytecode_1.5/test_class.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_class.pyo
Normal file
BIN
test/bytecode_1.5/test_class.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_del.pyc
Normal file
BIN
test/bytecode_1.5/test_del.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_del.pyo
Normal file
BIN
test/bytecode_1.5/test_del.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_docstring.pyc
Normal file
BIN
test/bytecode_1.5/test_docstring.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_docstring.pyo
Normal file
BIN
test/bytecode_1.5/test_docstring.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_empty.pyc
Normal file
BIN
test/bytecode_1.5/test_empty.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_empty.pyo
Normal file
BIN
test/bytecode_1.5/test_empty.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_exceptions.pyc
Normal file
BIN
test/bytecode_1.5/test_exceptions.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_exceptions.pyo
Normal file
BIN
test/bytecode_1.5/test_exceptions.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_exec.pyc
Normal file
BIN
test/bytecode_1.5/test_exec.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_exec.pyo
Normal file
BIN
test/bytecode_1.5/test_exec.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_expressions.pyc
Normal file
BIN
test/bytecode_1.5/test_expressions.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_expressions.pyo
Normal file
BIN
test/bytecode_1.5/test_expressions.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_functions.pyc
Normal file
BIN
test/bytecode_1.5/test_functions.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_functions.pyo
Normal file
BIN
test/bytecode_1.5/test_functions.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_global.pyc
Normal file
BIN
test/bytecode_1.5/test_global.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_global.pyo
Normal file
BIN
test/bytecode_1.5/test_global.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_globals.pyc
Normal file
BIN
test/bytecode_1.5/test_globals.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_globals.pyo
Normal file
BIN
test/bytecode_1.5/test_globals.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_import.pyc
Normal file
BIN
test/bytecode_1.5/test_import.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_import.pyo
Normal file
BIN
test/bytecode_1.5/test_import.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_integers.pyc
Normal file
BIN
test/bytecode_1.5/test_integers.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_integers.pyo
Normal file
BIN
test/bytecode_1.5/test_integers.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_lambda.pyc
Normal file
BIN
test/bytecode_1.5/test_lambda.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_lambda.pyo
Normal file
BIN
test/bytecode_1.5/test_lambda.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_loops.pyc
Normal file
BIN
test/bytecode_1.5/test_loops.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_loops.pyo
Normal file
BIN
test/bytecode_1.5/test_loops.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_misc.pyc
Normal file
BIN
test/bytecode_1.5/test_misc.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_misc.pyo
Normal file
BIN
test/bytecode_1.5/test_misc.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_nested_elif.pyc
Normal file
BIN
test/bytecode_1.5/test_nested_elif.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_nested_elif.pyo
Normal file
BIN
test/bytecode_1.5/test_nested_elif.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_prettyprint.pyc
Normal file
BIN
test/bytecode_1.5/test_prettyprint.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_prettyprint.pyo
Normal file
BIN
test/bytecode_1.5/test_prettyprint.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_print.pyc
Normal file
BIN
test/bytecode_1.5/test_print.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_print.pyo
Normal file
BIN
test/bytecode_1.5/test_print.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_single_stmt.pyc
Normal file
BIN
test/bytecode_1.5/test_single_stmt.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_single_stmt.pyo
Normal file
BIN
test/bytecode_1.5/test_single_stmt.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_slices.pyc
Normal file
BIN
test/bytecode_1.5/test_slices.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_slices.pyo
Normal file
BIN
test/bytecode_1.5/test_slices.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_tuple_params.pyc
Normal file
BIN
test/bytecode_1.5/test_tuple_params.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_tuple_params.pyo
Normal file
BIN
test/bytecode_1.5/test_tuple_params.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_tuples.pyc
Normal file
BIN
test/bytecode_1.5/test_tuples.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/test_tuples.pyo
Normal file
BIN
test/bytecode_1.5/test_tuples.pyo
Normal file
Binary file not shown.
BIN
test/bytecode_1.5/tuple_params.pyc
Normal file
BIN
test/bytecode_1.5/tuple_params.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_2.5/02_try_else.pyc
Normal file
BIN
test/bytecode_2.5/02_try_else.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_2.6/03_elif_vs_continue.pyc
Normal file
BIN
test/bytecode_2.6/03_elif_vs_continue.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/03_if_vs_and.pyc
Normal file
BIN
test/bytecode_2.6/03_if_vs_and.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/04_if_and_bug.pyc
Normal file
BIN
test/bytecode_2.6/04_if_and_bug.pyc
Normal file
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_2.7/00_docstring.pyc
Normal file
BIN
test/bytecode_2.7/00_docstring.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_3.0/00_assign.pyc
Normal file
BIN
test/bytecode_3.0/00_assign.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/00_import.pyc
Normal file
BIN
test/bytecode_3.0/00_import.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/00_pass.pyc
Normal file
BIN
test/bytecode_3.0/00_pass.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/02_while1_if_while1.pyc-notyet
Normal file
BIN
test/bytecode_3.0/02_while1_if_while1.pyc-notyet
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/04_multi_assign.pyc
Normal file
BIN
test/bytecode_3.0/04_multi_assign.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/04_raise.pyc
Normal file
BIN
test/bytecode_3.0/04_raise.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/04_withas.pyc
Normal file
BIN
test/bytecode_3.0/04_withas.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.0/10_for.pyc
Normal file
BIN
test/bytecode_3.0/10_for.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.1/04_def_annotate.pyc
Normal file
BIN
test/bytecode_3.1/04_def_annotate.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.1/04_def_attr.pyc-notyet
Normal file
BIN
test/bytecode_3.1/04_def_attr.pyc-notyet
Normal file
Binary file not shown.
BIN
test/bytecode_3.1/04_withas.pyc
Normal file
BIN
test/bytecode_3.1/04_withas.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.1/07_withstmt_fn.pyc
Normal file
BIN
test/bytecode_3.1/07_withstmt_fn.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.3/02_pos_args.pyc
Normal file
BIN
test/bytecode_3.3/02_pos_args.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.3/03_func_params.pyc
Normal file
BIN
test/bytecode_3.3/03_func_params.pyc
Normal file
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user