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
101 Commits
release-2.
...
release-2.
Author | SHA1 | Date | |
---|---|---|---|
|
ceb47aba9c | ||
|
08720474bf | ||
|
119bb9bb26 | ||
|
4455b5e280 | ||
|
dcbf8d2cf7 | ||
|
b52baddab6 | ||
|
03bb54f8ea | ||
|
313e468bdc | ||
|
dc80b140c6 | ||
|
fa48c9fc61 | ||
|
0a32a16d88 | ||
|
4aa703d727 | ||
|
f3a4e6ee54 | ||
|
43f5c5dcca | ||
|
3e49aa56bb | ||
|
9cc9fc99c2 | ||
|
2ebc558b40 | ||
|
34a582b64c | ||
|
2711c8d06f | ||
|
40badefe9d | ||
|
d9ef5ff69a | ||
|
a4e839960f | ||
|
7b3c7e83ec | ||
|
1b71d0a049 | ||
|
17b0caa4f0 | ||
|
b88e97c17d | ||
|
158bdd9b04 | ||
|
b0d3a4e47b | ||
|
4ba2eb6981 | ||
|
76768c889a | ||
|
8ae7e22f2e | ||
|
7e0526d627 | ||
|
2c7fcf9e62 | ||
|
5a813621cb | ||
|
9f7d36f8fb | ||
|
4e57c3da5b | ||
|
0de3efb01a | ||
|
fff4283f73 | ||
|
551e2174cb | ||
|
f25c9b45a4 | ||
|
077bca6141 | ||
|
31ebe88b38 | ||
|
bc2a36b9f7 | ||
|
66739752d8 | ||
|
716ee6d361 | ||
|
ca00e433b7 | ||
|
f0cc2df543 | ||
|
52da6f4a8f | ||
|
54a0af733b | ||
|
2927921856 | ||
|
cd480c8670 | ||
|
7d42329c31 | ||
|
b89177d234 | ||
|
31691b2003 | ||
|
09ef875b3e | ||
|
0129c3a16e | ||
|
4d5a3bc449 | ||
|
8d90e33832 | ||
|
0533bbb758 | ||
|
b82a8b90d5 | ||
|
d3a32b6877 | ||
|
21e51004ae | ||
|
d5b023aec4 | ||
|
e50bebb7c8 | ||
|
2e91de8355 | ||
|
5bbe2c4a45 | ||
|
6ffd2fca90 | ||
|
b3ede4b64b | ||
|
1785113045 | ||
|
657eeb7de8 | ||
|
313a8578b3 | ||
|
a30f3625ac | ||
|
e17d94f28f | ||
|
16af79f042 | ||
|
116263dd8c | ||
|
34841abe14 | ||
|
226f3c7e63 | ||
|
f77c4b53c4 | ||
|
6f0a252693 | ||
|
625feb0517 | ||
|
820fdb4771 | ||
|
d774222eb1 | ||
|
7ec54b15d8 | ||
|
7c5b8d803c | ||
|
c508413689 | ||
|
f859758aff | ||
|
44cd349cc7 | ||
|
276709cbb9 | ||
|
4640e7dece | ||
|
ce8c7a4dc2 | ||
|
6bd61deccc | ||
|
3ac3ef24ac | ||
|
d6ac51d0a2 | ||
|
69a8404edb | ||
|
008bd79719 | ||
|
e8ee3ac751 | ||
|
7a2703634f | ||
|
fe9c8d5734 | ||
|
0409cee6a9 | ||
|
39f0f7440b | ||
|
1d533cbb23 |
3
.gitignore
vendored
3
.gitignore
vendored
@@ -3,9 +3,12 @@
|
||||
/.cache
|
||||
/.eggs
|
||||
/.python-version
|
||||
/.tox
|
||||
/README
|
||||
/__pkginfo__.pyc
|
||||
/dist
|
||||
/how-to-make-a-release.txt
|
||||
/tmp
|
||||
/uncompyle6.egg-info
|
||||
__pycache__
|
||||
build
|
||||
|
@@ -3,7 +3,14 @@ language: python
|
||||
sudo: false
|
||||
|
||||
python:
|
||||
- '2.6'
|
||||
- '2.7'
|
||||
- '3.4'
|
||||
- '3.5'
|
||||
|
||||
install:
|
||||
- pip install -r requirements.txt
|
||||
- pip install -r requirements-dev.txt
|
||||
|
||||
script:
|
||||
- python ./setup.py develop && COMPILE='--compile' make check-2.7
|
||||
- python ./setup.py develop && COMPILE='--compile' make check
|
||||
|
607
ChangeLog
607
ChangeLog
@@ -1,3 +1,610 @@
|
||||
2016-05-02 rocky <rocky@gnu.org>
|
||||
|
||||
* __pkginfo__.py, bin/pydisassemble, bin/uncompyle6, setup.py,
|
||||
uncompyle6/__init__.py, uncompyle6/version.py: Add -V | --version
|
||||
and simplfy changing it
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/__init__.py: Expose uncompyle_file
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* test/Makefile, uncompyle6/semantics/pysource.py: Bug
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* test/Makefile, test/simple_source/expression/05_const_map.py: Add
|
||||
test for last fix. Drop 2.5 test until we figure out what's wrong
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner35.py,
|
||||
uncompyle6/semantics/pysource.py: Bug in 3.5 constant map parsing
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/__init__.py: Export module load and fns load_file,
|
||||
load_module
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* __pkginfo__.py, setup.py, uncompyle6/marsh.py: License is MIT marsh.py: remove unused import
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Forgot to define Python3ParserSingle
|
||||
|
||||
2016-05-01 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/parsers/parse2.py,
|
||||
uncompyle6/parsers/parse3.py: Start to DRY Python2 and Python3
|
||||
grammars Separate out 3.2, and 3.5+ specific grammar code
|
||||
|
||||
2016-04-30 rocky <rocky@gnu.org>
|
||||
|
||||
* ChangeLog, NEWS, README.rst, __pkginfo__.py: Get ready for release
|
||||
2.3.1
|
||||
|
||||
2016-04-30 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/astnode.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/pysource.py: Python 3.0..3.2 bug in
|
||||
LOAD_FAST/STORE_LOCAL LOAD_FAST '__locals__' STORE_LOCALS '' Also have to adjust doc constants for this crap astnode.py: minor format change
|
||||
|
||||
2016-04-30 rocky <rocky@gnu.org>
|
||||
|
||||
* test/Makefile, test/simple_source/def/06_classbug.py,
|
||||
test/test_pythonlib.py: Test optimized Python code and Python 3.2
|
||||
|
||||
2016-04-30 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Pevious commit grammar change is
|
||||
Python 3.5 and up
|
||||
|
||||
2016-04-30 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Python 3.5 if statments decompyle Sometimes it doesn't need JUMP_FORWARD _come_from _come_from For example: def handle2(module): if module == 'foo': try: module = 1 except ImportError as exc: module = exc return module And: if __name__: for i in (1, 2): x = 3
|
||||
|
||||
2016-04-28 rocky <rocky@gnu.org>
|
||||
|
||||
* requirements.txt, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
spark -> spark_parser
|
||||
|
||||
2016-04-28 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parsers/spark.py: Really remove spark - Use external
|
||||
package instead
|
||||
|
||||
2016-04-27 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #8 from rocky/external-spark External spark
|
||||
|
||||
2016-04-27 rocky <rocky@gnu.org>
|
||||
|
||||
* .travis.yml, circle.yml: Note dependencies on spark
|
||||
|
||||
2016-04-27 rocky <rocky@gnu.org>
|
||||
|
||||
* .gitignore, README.rst, requirements.txt, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/astnode.py, uncompyle6/parsers/parse2.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Use external spark now.
|
||||
|
||||
2016-04-20 rocky <rocky@gnu.org>
|
||||
|
||||
* circle.yml: Back to 2.7.8
|
||||
|
||||
2016-04-20 rocky <rocky@gnu.org>
|
||||
|
||||
* circle.yml: Try python 2.7.10
|
||||
|
||||
2016-04-19 rocky <rocky@gnu.org>
|
||||
|
||||
* README.rst: Remove link to Mysterie uncompyle2 per request
|
||||
|
||||
2016-04-19 rocky <rocky@gnu.org>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py: Get ready for release 2.2.0
|
||||
|
||||
2016-04-18 rocky <rocky@gnu.org>
|
||||
|
||||
* README.rst: Another typo
|
||||
|
||||
2016-04-18 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #7 from rocky/single-compile Support single-mode compile
|
||||
|
||||
2016-04-18 rocky <rocky@gnu.org>
|
||||
|
||||
* README.rst: Doc typo
|
||||
|
||||
2016-04-18 Thomas Grainger <tom.grainger@procensus.com>
|
||||
|
||||
* __pkginfo__.py, setup.cfg, setup.py: declare Python3 support in
|
||||
wheel and trove
|
||||
|
||||
2016-04-18 rocky <rocky@gnu.org>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/parsers/parse2.py,
|
||||
uncompyle6/parsers/parse3.py: Start to DRY Python 2 and Python 3
|
||||
grammar code Move common code to parser.py
|
||||
|
||||
2016-04-18 rocky <rocky@gnu.org>
|
||||
|
||||
* pytest/test_single_compile.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py: Add
|
||||
simgle-mode compilation
|
||||
|
||||
2016-04-17 rocky <rocky@gnu.org>
|
||||
|
||||
* pytest/test_single_compile.py, uncompyle6/parser.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/pysource.py: Towards single compilation
|
||||
|
||||
2016-04-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : Back off if_else_ternary pending Fails on Python 3.4 investigation Python 3.5 works though
|
||||
|
||||
2016-04-10 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .gitignore: Test administrivia
|
||||
|
||||
2016-04-07 rocky <rb@dustyfeet.com>
|
||||
|
||||
* HISTORY.md, README.rst,
|
||||
test/simple_source/branching/10_if_else_ternary.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py: Handle
|
||||
Ternary "or". Remove mention of uncompyle3 uncompyle3 removed per Mysterie's request [Fixes Issue #5]
|
||||
|
||||
2016-03-11 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile: remove uncompyle3 and make test work again * uncompyle3 removed by request * make test on python 2.7 is failing on some python3 and python3.5 bytecodes. Remove for now.
|
||||
|
||||
2016-02-23 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* : Merge pull request #3 from lelicopter/master Bug correction (parse cmd options)
|
||||
|
||||
2016-01-07 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/bytecompile-tests, test/test_pythonlib.py: Add
|
||||
Python 3.5 tests that we can do.
|
||||
|
||||
2016-01-05 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* HISTORY.md: Grammar fixes
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py: Get ready for release 2.1.3
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/opcodes/opcode_23.py, uncompyle6/opcodes/opcode_25.py,
|
||||
uncompyle6/opcodes/opcode_26.py, uncompyle6/opcodes/opcode_27.py,
|
||||
uncompyle6/opcodes/opcode_32.py, uncompyle6/opcodes/opcode_33.py,
|
||||
uncompyle6/opcodes/opcode_34.py, uncompyle6/opcodes/opcode_35.py,
|
||||
uncompyle6/opcodes/opcode_3x.py, uncompyle6/parser.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner32.py,
|
||||
uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/scanners/scanner35.py: Start to DRY opcode code. Limited
|
||||
support for decopyling Python 3.5
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/ok_lib3.4/antigravity.py,
|
||||
test/ok_lib3.4/bisect.py, test/test_pythonlib.py: Start 3.4 library
|
||||
verify tests
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: Regularize spelling of bytecode
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* Makefile, README.rst: Add download shield. Add check-rst target
|
||||
|
||||
2016-01-02 R. Bernstein <rocky@users.noreply.github.com>
|
||||
|
||||
* README.rst: Update README.rst
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py: Track recent source class
|
||||
semantic actions in fragment actions
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py:
|
||||
Make ScannerXX() initialization the same on Python 2.x and 3.x
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile,
|
||||
test/simple_source/comprehension/05_list_comprehension.py,
|
||||
test/simple_source/def/02_closure.py, test/test_pythonlib.py,
|
||||
uncompyle6/main.py, uncompyle6/verify.py: Verify 3.4 bytecode.
|
||||
verify API call bug fixed.
|
||||
|
||||
2016-01-02 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/def/05_class.py, uncompyle6/load.py,
|
||||
uncompyle6/main.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/pysource.py: Python 3 class deparsing. stop
|
||||
earlier in uncompyle6 on a syntax error.
|
||||
|
||||
2016-01-01 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Fix make_closure compilation from
|
||||
2.x of 3.3 bytecode
|
||||
|
||||
2016-01-01 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/def/02_closure.py,
|
||||
uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Work
|
||||
on MAKE_CLOSURE rules for Python 3.3
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py: track source deparsing
|
||||
superclass bug fix
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, __pkginfo__.py: Get ready for release 2.1.2
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/base_tests/compile_tests,
|
||||
test/base_tests/python2.7/test_applyEquiv.py,
|
||||
test/base_tests/python2.7/test_augmentedAssign.py,
|
||||
test/base_tests/python2.7/test_class.py,
|
||||
test/base_tests/python2.7/test_del.py,
|
||||
test/base_tests/python2.7/test_divide_future.py,
|
||||
test/base_tests/python2.7/test_divide_no_future.py,
|
||||
test/base_tests/python2.7/test_docstring.py,
|
||||
test/base_tests/python2.7/test_empty.py,
|
||||
test/base_tests/python2.7/test_exceptions.py,
|
||||
test/base_tests/python2.7/test_exec.py,
|
||||
test/base_tests/python2.7/test_expressions.py,
|
||||
test/base_tests/python2.7/test_extendedImport.py,
|
||||
test/base_tests/python2.7/test_extendedPrint.py,
|
||||
test/base_tests/python2.7/test_extendedarg.py-notyet,
|
||||
test/base_tests/python2.7/test_functions.py,
|
||||
test/base_tests/python2.7/test_global.py,
|
||||
test/base_tests/python2.7/test_globals.py,
|
||||
test/base_tests/python2.7/test_import.py,
|
||||
test/base_tests/python2.7/test_import_as.py,
|
||||
test/base_tests/python2.7/test_integers.py,
|
||||
test/base_tests/python2.7/test_iterators.py,
|
||||
test/base_tests/python2.7/test_lambda.py,
|
||||
test/base_tests/python2.7/test_listComprehensions.py,
|
||||
test/base_tests/python2.7/test_loops.py,
|
||||
test/base_tests/python2.7/test_loops2.py,
|
||||
test/base_tests/python2.7/test_mine.py,
|
||||
test/base_tests/python2.7/test_misc.py,
|
||||
test/base_tests/python2.7/test_nested_elif.py,
|
||||
test/base_tests/python2.7/test_nested_scopes.py,
|
||||
test/base_tests/python2.7/test_prettyprint.py,
|
||||
test/base_tests/python2.7/test_print.py,
|
||||
test/base_tests/python2.7/test_print_to.py,
|
||||
test/base_tests/python2.7/test_single_stmt.py,
|
||||
test/base_tests/python2.7/test_slices.py,
|
||||
test/base_tests/python2.7/test_tuple_params.py-notyet,
|
||||
test/base_tests/python2.7/test_tuples.py-notyet,
|
||||
test/base_tests/python2.7/test_yield.py,
|
||||
test/base_tests/python3.4/__init__.py: Remove tests we will never
|
||||
use
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml, Makefile: Try travis testing on Python 3.5. Fix up
|
||||
Makefile to avoid pytest on 3.5 for now
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/ok_lib2.7/dircache.py, test/ok_lib2.7/dis.py: Add a few tests
|
||||
from Python 2.7 standard library
|
||||
|
||||
2015-12-31 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/def/05_class.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
Handle Python 3.3 > dotted class names
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: Note Python 3.5
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* Makefile, test/Makefile, uncompyle6/__init__.py,
|
||||
uncompyle6/disas.py, uncompyle6/load.py, uncompyle6/magics.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner3.py: Allow Python
|
||||
3.5 to decomplyle other versions. No Python 3.5 bytecode support
|
||||
just yet though.
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Show details on parsing assert
|
||||
failures.
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py:
|
||||
Remove accidental schmutz. Try using pattr on 3.4 to get fn names
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Parses another variation of Python3
|
||||
try/except. Reinstate some tests
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : Reinstate list comprehension test. I think we've found/fixed the
|
||||
initialization bug.
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/code.py, uncompyle6/disas.py, uncompyle6/main.py,
|
||||
uncompyle6/marsh.py, uncompyle6/scanners/scanner27.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py, uncompyle6/verify.py: Start using
|
||||
our replacement for inspect.iscode
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/spark.py, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Doc changes.
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/spark.py: document GenericASTTraversal.preorder
|
||||
and default.
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Walker->SourceWalker
|
||||
Traverser->FragmentsWalker
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parsers/parse3.py: Tidy parse3 grammer a little
|
||||
|
||||
2015-12-30 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/exception/25_try_except.py,
|
||||
test/test_pythonlib.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanners/scanner27.py, uncompyle6/scanners/scanner3.py,
|
||||
uncompyle6/scanners/scanner34.py, uncompyle6/semantics/pysource.py:
|
||||
Towards Python3 getting try/except working more often.
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Fix another cross-version bug:
|
||||
eliminate version-specific library 'dis' and use corresponding
|
||||
version-indepent routine instead.
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, uncompyle6/marsh.py: Fix Python 2 cross deparsing
|
||||
pythond bytecode tuples co_consts, co_names, co_varnames. Reinstate
|
||||
cross Python 2-3 uncompiling
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner34.py: Syntax error typo
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/marsh.py: Make sure internObjects is (re)initialized
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/parser.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/verify.py: inspect.iscode -> hasattr for now until we
|
||||
write a cross-version iscode
|
||||
|
||||
2015-12-29 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst, test/Makefile, uncompyle6/opcodes/opcode_32.py,
|
||||
uncompyle6/opcodes/opcode_33.py, uncompyle6/opcodes/opcode_34.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py:
|
||||
scanner3: Python 2.6 compatibility: change set initializations. Get
|
||||
rid of * import opcode_*: only a little of the much-needed larger
|
||||
cleanup Makefile: remove 3.x bytecode checking from Python 2.x for
|
||||
now. DRY Makefile a little bit (but more is needed)
|
||||
|
||||
2015-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/scanners/scanner3.py: Python 2.6.9 compatibility
|
||||
|
||||
2015-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/main.py, uncompyle6/marsh.py: Marshal loading of =
|
||||
>python 3.4 from Python < 3.4
|
||||
|
||||
2015-12-28 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/disas.py, uncompyle6/load.py, uncompyle6/main.py,
|
||||
uncompyle6/marsh.py, uncompyle6/scanners/scanner3.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
Add Python3 marshal codes and start to handle cross-version Python
|
||||
code object types, introducing scan.Code3
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/load.py, uncompyle6/marsh.py: Possibly closer to
|
||||
getting 2.7 to read 3.4 bytecode
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/load.py, uncompyle6/main.py, uncompyle6/marsh.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py,
|
||||
uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/semantics/pysource.py: Fix up Python 2.x's ability to get
|
||||
code from Python 3.x's bytecode
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/test_pythonlib.py: defer some tests
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : commit 7c5b8d803c5b76b185ebc8f6e7587fa64ef531e9 Author: rocky
|
||||
<rb@dustyfeet.com> Date: Sun Dec 27 16:49:37 2015 -0500
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* : 3.2 bytecode
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, README.rst, __pkginfo__.py: Get ready for release
|
||||
2.1.1
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* ChangeLog, NEWS, README.rst, __pkginfo__.py,
|
||||
test/bytecompile-tests, uncompyle6/opcodes/Makefile,
|
||||
uncompyle6/opcodes/opcode_23.py, uncompyle6/opcodes/opcode_24.py,
|
||||
uncompyle6/opcodes/opcode_25.py, uncompyle6/opcodes/opcode_26.py,
|
||||
uncompyle6/opcodes/opcode_27.py, uncompyle6/opcodes/opcode_32.py,
|
||||
uncompyle6/opcodes/opcode_33.py, uncompyle6/opcodes/opcode_34.py,
|
||||
uncompyle6/parser.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py,
|
||||
uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
DRY Python3 scanner code. Some cross version handling fixed. Some
|
||||
Python 3.2 and 3.3 deparse fixes.
|
||||
|
||||
2015-12-27 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst, test/bytecompile-tests, uncompyle6/opcodes/Makefile,
|
||||
uncompyle6/opcodes/opcode_23.py, uncompyle6/opcodes/opcode_24.py,
|
||||
uncompyle6/opcodes/opcode_25.py, uncompyle6/opcodes/opcode_26.py,
|
||||
uncompyle6/opcodes/opcode_27.py, uncompyle6/opcodes/opcode_32.py,
|
||||
uncompyle6/opcodes/opcode_33.py, uncompyle6/opcodes/opcode_34.py,
|
||||
uncompyle6/parser.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py,
|
||||
uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py,
|
||||
uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py,
|
||||
uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py:
|
||||
DRY Python3 scanner code. Some cross version handling fixed. Some
|
||||
Python 3.2 and 3.3 deparse fixes.
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml, test/Makefile, uncompyle6/verify.py: Running native
|
||||
on Python 3.3 needs more work
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/test_pythonlib.py: Add ok-2.7 tests for 3.4
|
||||
full testing
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile, test/bytecompile-tests, test/test_pythonlib.py: Add
|
||||
verify tests. Add Python 2.6 bytecode and use.
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Add node and template code to
|
||||
cleanup "for" handling
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml: Try Python 2.6 testing on travis
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/Makefile: For testing we can't 3.3 bytecodes on 2.7 yet, so
|
||||
use 3.2
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml, Makefile, requirements-dev.txt, test/Makefile,
|
||||
test/bytecompile-tests, test/test_pythonlib.py,
|
||||
uncompyle6/__init__.py, uncompyle6/opcodes/opcode_32.py,
|
||||
uncompyle6/opcodes/opcode_33.py, uncompyle6/opcodes/opcode_34.py,
|
||||
uncompyle6/scanner.py, uncompyle6/scanners/scanner32.py,
|
||||
uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py,
|
||||
uncompyle6/semantics/pysource.py: Fix up Python 3.2, 3.3, and 3.4
|
||||
cross-version scanners Try travis 2.6 and 3.3
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .travis.yml: Travis: try checking 3.4
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/exception/05_try_except.py,
|
||||
test/simple_source/looping/10_while.py,
|
||||
test/simple_source/looping/while.py,
|
||||
test/simple_source/simple_stmts/00_assign.py,
|
||||
test/simple_source/simple_stmts/00_import.py,
|
||||
test/simple_source/simple_stmts/00_pass.py,
|
||||
test/simple_source/simple_stmts/15_assert.py,
|
||||
test/simple_source/stmts/00_assign.py,
|
||||
test/simple_source/stmts/00_import.py,
|
||||
test/simple_source/stmts/00_pass.py,
|
||||
test/simple_source/stmts/15_assert.py,
|
||||
test/simple_source/stmts/15_for_if.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py:
|
||||
Fix up looping by reinstating JUMP_ABSOLUTE -> JUMP_BACK or CONTINUE
|
||||
get jump offsets into jump attributes. Fix up 3.2 scanner paritally
|
||||
and use that in 3.4 for in cross version disassembly.
|
||||
|
||||
2015-12-26 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/exception/01_try_except.py,
|
||||
test/simple_source/exception/05_try_except.py, uncompyle6/main.py,
|
||||
uncompyle6/opcodes/opcode_34.py, uncompyle6/parsers/parse3.py,
|
||||
uncompyle6/semantics/pysource.py: Python3 try/except handling
|
||||
improvements. Add Walker exception and use that: fixes erroneous
|
||||
uncompyle success message on parse error.
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* test/simple_source/exception/01_try_except.py,
|
||||
uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py: WIP redo
|
||||
try/except for Python3
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Fix bugs in using pysource from
|
||||
fragments.
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* uncompyle6/semantics/Makefile, uncompyle6/semantics/fragments.py,
|
||||
uncompyle6/semantics/pysource.py: Two modes of disassembly, one
|
||||
where we show hidden code and one where we don't.
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* README.rst: README.rst typos
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* .gitignore, ChangeLog, MANIFEST.in, NEWS, __pkginfo__.py,
|
||||
test/Makefile: Get ready for releaes 2.0.0
|
||||
|
||||
2015-12-25 rocky <rb@dustyfeet.com>
|
||||
|
||||
* pytest/test_deparse.py: Port deparse test from python-deparse to
|
||||
|
11
HISTORY.md
11
HISTORY.md
@@ -30,7 +30,7 @@ The last mention of a release of SPARK from John is around 2002.
|
||||
|
||||
In the fall of 2000, Hartmut Goebel
|
||||
[took over maintaining the code](https://groups.google.com/forum/#!searchin/comp.lang.python/hartmut$20goebel/comp.lang.python/35s3mp4-nuY/UZALti6ujnQJ). The
|
||||
first subsequennt public release announcement that I can find is
|
||||
first subsequent public release announcement that I can find is
|
||||
["decompyle - A byte-code-decompiler version 2.2 beta 1"](https://mail.python.org/pipermail/python-announce-list/2002-February/001272.html).
|
||||
|
||||
From the CHANGES file found in
|
||||
@@ -38,9 +38,8 @@ From the CHANGES file found in
|
||||
it appears that Hartmut did most of the work to get this code to
|
||||
accept the full Python language. He added precidence to the table
|
||||
specifiers, support for multiple versions of Python, the
|
||||
pretty-printing of docstrings, lists and hashes. He also wrote
|
||||
extensive tests and routines to the testing and verification of
|
||||
decompiled bytecode.
|
||||
pretty-printing of docstrings, lists, and hashes. He also wrote test and verification routines of
|
||||
deparsed bytecode, and used this in an extensive set of tests that he also wrote. He could verify against the entire Python library.
|
||||
|
||||
decompyle2.2 was packaged for Debian (sarge) by
|
||||
[Ben Burton around 2002](https://packages.qa.debian.org/d/decompyle.html). As
|
||||
@@ -91,10 +90,6 @@ Hartmut a decade an a half ago:
|
||||
NB. This is not a masterpiece of software, but became more like a hack.
|
||||
Probably a complete rewrite would be sensefull. hG/2000-12-27
|
||||
|
||||
One of the attempts to modernize it and make it available for Python3
|
||||
is [the one by Anton Vorobyov (DarkFenX)](https://github.com/DarkFenX/uncompyle3). I've
|
||||
followed some of the ideas there in this project.
|
||||
|
||||
Lastly, I should mention [unpyc](https://code.google.com/p/unpyc3/)
|
||||
and most especially [pycdc](https://github.com/zrax/pycdc), largely by
|
||||
Michael Hansen and Darryl Pogue. If they supported getting source-code
|
||||
|
22
Makefile
22
Makefile
@@ -18,8 +18,21 @@ TEST_TYPES=check-long check-short check-2.7 check-3.4
|
||||
#: Default target - same as "check"
|
||||
all: check
|
||||
|
||||
#: Run working tests
|
||||
check check-3.4 check-2.7: pytest
|
||||
# Run all tests
|
||||
check:
|
||||
@PYTHON_VERSION=`$(PYTHON) -V 2>&1 | cut -d ' ' -f 2 | cut -d'.' -f1,2`; \
|
||||
$(MAKE) check-$$PYTHON_VERSION
|
||||
|
||||
#: Tests for Python 2.7, 3.3 and 3.4
|
||||
check-2.7 check-3.3 check-3.4: pytest
|
||||
$(MAKE) -C test $@
|
||||
|
||||
#: Tests for Python 3.5 - pytest doesn't work here
|
||||
check-3.5:
|
||||
$(MAKE) -C test $@
|
||||
|
||||
#:Tests for Python 2.6 (doesn't have pytest)
|
||||
check-2.6:
|
||||
$(MAKE) -C test $@
|
||||
|
||||
#: Run py.test tests
|
||||
@@ -47,6 +60,11 @@ sdist:
|
||||
#: Style check. Set env var LINT to pyflakes, flake, or flake8
|
||||
lint: flake8
|
||||
|
||||
# Check StructuredText long description formatting
|
||||
check-rst:
|
||||
$(PYTHON) setup.py --long-description | rst2html.py > python3-trepan.html
|
||||
|
||||
#: Lint program
|
||||
flake8:
|
||||
$(LINT) uncompyle6
|
||||
|
||||
|
58
NEWS
58
NEWS
@@ -1,4 +1,60 @@
|
||||
uncompyle6 1.0.0 2015-12-11
|
||||
uncompyle6 2.3.2 2016-05-1
|
||||
|
||||
- Add --version option standalone scripts
|
||||
- Correct License information in package
|
||||
- expose fns uncompyle_file, load_file, and load_module
|
||||
- Start to DRY Python2 and Python3 grammars Separate out 3.2, and 3.5+
|
||||
specific grammar code
|
||||
- Fix bug in 3.5+ constant map parsing
|
||||
|
||||
uncompyle6 2.3.0, 2.3.1 2016-04-30
|
||||
|
||||
- Require spark_parser >= 1.1.0
|
||||
|
||||
uncompyle6 2.2.0 2016-04-30
|
||||
|
||||
- Spark is no longer here but pulled separate package spark_parse
|
||||
- Python 3 parsing fixes
|
||||
- More tests
|
||||
|
||||
uncompyle6 2.2.0 2016-04-02
|
||||
|
||||
- Support single-mode (in addtion to exec-mode) compilation
|
||||
- Start to DRY Python 2 and Python 3 grammars
|
||||
- Fix bug in if else ternary construct
|
||||
- Fix bug in uncomplye6 -d and -r options (via lelicopter)
|
||||
|
||||
|
||||
uncompyle6 2.1.3 2016-01-02
|
||||
|
||||
- Limited support for decompiling Python 3.5
|
||||
- Improve Python 3 class deparsing
|
||||
- Handle MAKE_CLOSURE opcode
|
||||
- Start to DRY opcode code.
|
||||
- increase test coverage
|
||||
- fix misc small bugs and some improvements
|
||||
|
||||
uncompyle6 2.1.2 2015-12-31
|
||||
|
||||
- Fix cross-version Marshal loading
|
||||
- Handle Python 3.3 . dotted class names
|
||||
- Limited 3.5 support: allows deparsing other versions
|
||||
- Refactor code more, misc bug fixes
|
||||
|
||||
uncompyle6 2.1.1 2015-12-27
|
||||
|
||||
- packaging issues
|
||||
|
||||
uncompyle6 2.1.0 2015-12-27
|
||||
|
||||
- Python 3.x deparsing much more solid
|
||||
- Better cross-version deparsing
|
||||
|
||||
Some bugs squashed while other run rampant. Some code cleanup while
|
||||
much more is yet needed. More tests added, but many more are needed.
|
||||
|
||||
|
||||
uncompyle6 2.0.0 2015-12-11
|
||||
|
||||
Changes from uncompyle2
|
||||
|
||||
|
32
README.rst
32
README.rst
@@ -3,26 +3,28 @@
|
||||
uncompyle6
|
||||
==========
|
||||
|
||||
A native Python Byte-code Disassembler, Decompiler, and byte-code library
|
||||
A native Python bytecode Disassembler, Decompiler, Fragment Decompiler
|
||||
and bytecode library
|
||||
|
||||
|
||||
Introduction
|
||||
------------
|
||||
|
||||
*uncompyle6* translates Python byte-code back into equivalent Python
|
||||
source code. It accepts byte-codes from Python version 2.5 to 3.4 or
|
||||
so and has been tested on Python 2.6, 2.7 and Python 3.4.
|
||||
*uncompyle6* translates Python bytecode back into equivalent Python
|
||||
source code. It accepts bytecodes from Python version 2.5 to 3.4 or
|
||||
so and has been tested on Python running versions 2.6, 2.7, 3.3,
|
||||
3.4 and 3.5.
|
||||
|
||||
Why this?
|
||||
---------
|
||||
|
||||
What makes this different other CPython byte-code 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.
|
||||
|
||||
I using this to deparse fragments of code inside my trepan_
|
||||
debuggers_. For that, I need to record text fragements for all
|
||||
byte-code offsets (of interest). This purpose although largely
|
||||
I use this to deparse fragments of code inside my trepan_
|
||||
debuggers_. For that, I need to record text fragments for all
|
||||
bytecode offsets (of interest). This purpose although largely
|
||||
compatible with the original intention is yet a little bit different.
|
||||
See this_ for more information.
|
||||
|
||||
@@ -35,7 +37,7 @@ information.
|
||||
Other parts of the library can be used inside Python for various
|
||||
bytecode-related tasks. For example you can read in bytecode,
|
||||
i.e. perform a version-independent `marshal.loads()`, and disassemble
|
||||
the bytecode using version of Python different from the one used to
|
||||
the bytecode using a version of Python different from the one used to
|
||||
compile the bytecode.
|
||||
|
||||
|
||||
@@ -46,6 +48,8 @@ This uses setup.py, so it follows the standard Python routine:
|
||||
|
||||
::
|
||||
|
||||
pip install -r requirements.txt
|
||||
pip install -r requirements-dev.txt
|
||||
python setup.py install # may need sudo
|
||||
# or if you have pyenv:
|
||||
python setup.py develop
|
||||
@@ -75,7 +79,7 @@ Run
|
||||
::
|
||||
|
||||
./bin/uncompyle6 -h
|
||||
./bin/pydisassemble -y
|
||||
./bin/pydisassemble -h
|
||||
|
||||
for usage help
|
||||
|
||||
@@ -83,20 +87,18 @@ for usage help
|
||||
Known Bugs/Restrictions
|
||||
-----------------------
|
||||
|
||||
Python 3 deparsing is getting there, but not solid. Using Python 2 to
|
||||
deparse Python 3 is problematic, especilly for versions 3.4 and
|
||||
greater.
|
||||
Python 2 deparsing is probably as solid as the various versions of
|
||||
uncompyle2. Python 3 deparsing is okay but not as solid.
|
||||
|
||||
See Also
|
||||
--------
|
||||
|
||||
* https://github.com/zrax/pycdc
|
||||
* https://github.com/Mysterie/uncompyle2
|
||||
* https://github.com/DarkFenX/uncompyle3
|
||||
* https://code.google.com/p/unpyc3/
|
||||
|
||||
The HISTORY file.
|
||||
|
||||
.. |downloads| image:: https://img.shields.io/pypi/dd/uncompyle6.svg
|
||||
.. _trepan: https://pypi.python.org/pypi/trepan
|
||||
.. _debuggers: https://pypi.python.org/pypi/trepan3k
|
||||
.. _remake: https://bashdb.sf.net/remake
|
||||
|
@@ -9,13 +9,20 @@
|
||||
|
||||
# Things that change more often go here.
|
||||
copyright = """
|
||||
Copyright (C) 2015 Rocky Bernstein <rb@dustyfeet.com>.
|
||||
Copyright (C) 2015, 2016 Rocky Bernstein <rb@dustyfeet.com>.
|
||||
"""
|
||||
|
||||
classifiers = ['Development Status :: 3 - Alpha',
|
||||
'Intended Audience :: Developers',
|
||||
'Operating System :: OS Independent',
|
||||
'Programming Language :: Python',
|
||||
'Programming Language :: Python :: 2',
|
||||
'Programming Language :: Python :: 2.6',
|
||||
'Programming Language :: Python :: 2.7',
|
||||
'Programming Language :: Python :: 3',
|
||||
'Programming Language :: Python :: 3.3',
|
||||
'Programming Language :: Python :: 3.4',
|
||||
'Programming Language :: Python :: 3.5',
|
||||
'Topic :: Software Development :: Debuggers',
|
||||
'Topic :: Software Development :: Libraries :: Python Modules',
|
||||
]
|
||||
@@ -24,10 +31,13 @@ classifiers = ['Development Status :: 3 - Alpha',
|
||||
author = "Rocky Bernstein, Hartmut Goebel, John Aycock, and others"
|
||||
author_email = "rb@dustyfeet.com"
|
||||
ftp_url = None
|
||||
# license = 'BSDish'
|
||||
install_requires = ['python-spark >= 1.1.0']
|
||||
license = 'GPL'
|
||||
|
||||
license = 'MIT'
|
||||
mailing_list = 'python-debugger@googlegroups.com'
|
||||
modname = 'uncompyle6'
|
||||
packages = ['uncompyle6', 'uncompyle6.opcodes']
|
||||
packages = ['uncompyle6', 'uncompyle6.opcodes', 'uncompyle6.semantics', 'uncompyle6.scanners', 'uncompyle6.parsers']
|
||||
py_modules = None
|
||||
short_desc = 'Python byte-code disassembler and source-code converter'
|
||||
scripts = ['bin/uncompyle6', 'bin/pydisassemble']
|
||||
@@ -40,7 +50,6 @@ def get_srcdir():
|
||||
return os.path.realpath(filename)
|
||||
|
||||
ns = {}
|
||||
version = '2.0.0'
|
||||
web = 'https://github.com/rocky/python-uncompyle6/'
|
||||
|
||||
# tracebacks in zip files are funky and not debuggable
|
||||
|
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/env python
|
||||
# Mode: -*- python -*-
|
||||
#
|
||||
# Copyright (c) 2015 by Rocky Bernstein <rb@dustyfeet.com>
|
||||
# Copyright (c) 2015-2016 by Rocky Bernstein <rb@dustyfeet.com>
|
||||
#
|
||||
from __future__ import print_function
|
||||
import sys, os, getopt
|
||||
@@ -9,11 +9,13 @@ import sys, os, getopt
|
||||
program = os.path.basename(__file__)
|
||||
|
||||
__doc__ = """
|
||||
Usage: %s [OPTIONS]... FILE
|
||||
Usage:
|
||||
%s [OPTIONS]... FILE
|
||||
%s [--help | -h | -V | --version]
|
||||
|
||||
Examples:
|
||||
%s foo.pyc
|
||||
%s foo.py
|
||||
%s foo.pyc
|
||||
%s foo.py
|
||||
%s -o foo.pydis foo.pyc
|
||||
%s -o /tmp foo.pyc
|
||||
|
||||
@@ -24,7 +26,7 @@ Options:
|
||||
<path>
|
||||
--help show this message
|
||||
|
||||
""" % ((program,) * 5)
|
||||
""" % ((program,) * 6)
|
||||
|
||||
|
||||
Usage_short = \
|
||||
@@ -32,6 +34,7 @@ Usage_short = \
|
||||
|
||||
from uncompyle6 import check_python_version
|
||||
from uncompyle6.disas import disassemble_files
|
||||
from uncompyle6.version import VERSION
|
||||
|
||||
check_python_version(program)
|
||||
|
||||
@@ -40,7 +43,7 @@ out_base = None
|
||||
|
||||
|
||||
try:
|
||||
opts, files = getopt.getopt(sys.argv[1:], 'ho:', ['help'])
|
||||
opts, files = getopt.getopt(sys.argv[1:], 'hVo:', ['help', 'version'])
|
||||
except getopt.GetoptError as e:
|
||||
print('%s: %s' % (os.path.basename(sys.argv[0]), e), file=sys.stderr)
|
||||
sys.exit(-1)
|
||||
@@ -48,6 +51,9 @@ except getopt.GetoptError as e:
|
||||
for opt, val in opts:
|
||||
if opt in ('-h', '--help'):
|
||||
print(__doc__)
|
||||
sys.exit(1)
|
||||
elif opt in ('-V', '--version'):
|
||||
print("%s %s" % (program, VERSION))
|
||||
sys.exit(0)
|
||||
elif opt == '-o':
|
||||
outfile = val
|
||||
|
@@ -1,16 +1,23 @@
|
||||
#!/usr/bin/env python
|
||||
# Mode: -*- python -*-
|
||||
#
|
||||
# Copyright (c) 2015-2016 by Rocky Bernstein
|
||||
# Copyright (c) 2000-2002 by hartmut Goebel <h.goebel@crazy-compilers.com>
|
||||
# Copyright (c) 2015 by Rocky Bernstein
|
||||
#
|
||||
from __future__ import print_function
|
||||
import sys, os, getopt, time
|
||||
|
||||
"""
|
||||
Usage: uncompyle6 [OPTIONS]... [ FILE | DIR]...
|
||||
program = os.path.basename(__file__)
|
||||
|
||||
__doc__ = """
|
||||
Usage:
|
||||
%s [OPTIONS]... [ FILE | DIR]...
|
||||
%s [--help | -h | --V | --version]
|
||||
|
||||
Examples:
|
||||
uncompyle6 foo.pyc bar.pyc # decompile foo.pyc, bar.pyc to stdout
|
||||
uncompyle6 -o . foo.pyc bar.pyc # decompile to ./foo.pyc_dis and ./bar.pyc_dis
|
||||
uncompyle6 -o /tmp /usr/lib/python1.5 # decompile whole library
|
||||
%s foo.pyc bar.pyc # decompile foo.pyc, bar.pyc to stdout
|
||||
%s -o . foo.pyc bar.pyc # decompile to ./foo.pyc_dis and ./bar.pyc_dis
|
||||
%s -o /tmp /usr/lib/python1.5 # decompile whole library
|
||||
|
||||
Options:
|
||||
-o <path> output decompiled files to this path:
|
||||
@@ -34,26 +41,25 @@ Options:
|
||||
Debugging Options:
|
||||
--asm -a include byte-code (disables --verify)
|
||||
--grammar -g show matching grammar
|
||||
--treee -t include syntax tree (disables --verify)
|
||||
--tree -t include syntax tree (disables --verify)
|
||||
|
||||
Extensions of generated files:
|
||||
'.pyc_dis' '.pyo_dis' successfully decompiled (and verified if --verify)
|
||||
+ '_unverified' successfully decompile but --verify failed
|
||||
+ '_failed' decompile failed (contact author for enhancement)
|
||||
"""
|
||||
|
||||
from __future__ import print_function
|
||||
import sys, os, getopt, time
|
||||
""" % ((program,) * 6
|
||||
|
||||
program = os.path.basename(__file__)
|
||||
|
||||
from uncompyle6 import verify, check_python_version
|
||||
from uncompyle6.main import main, status_msg
|
||||
from uncompyle6.version import VERSION
|
||||
|
||||
def usage():
|
||||
print("""usage:
|
||||
%s [--help] [--verify] [--asm] [--tree] [--grammar] [-o <path>] FILE|DIR...
|
||||
""" % program)
|
||||
%s [--verify] [--asm] [--tree] [--grammar] [-o <path>] FILE|DIR...
|
||||
%s [--help | -h | --version | -V]
|
||||
""" % (program, program))
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
@@ -68,8 +74,8 @@ timestamp = False
|
||||
timestampfmt = "# %Y.%m.%d %H:%M:%S %Z"
|
||||
|
||||
try:
|
||||
opts, files = getopt.getopt(sys.argv[1:], 'hagtdro:c:p:',
|
||||
'help asm grammar recurse timestamp tree verify '
|
||||
opts, files = getopt.getopt(sys.argv[1:], 'hagtdrVo:c:p:',
|
||||
'help asm grammar recurse timestamp tree verify version '
|
||||
'showgrammar'.split(' '))
|
||||
except getopt.GetoptError as e:
|
||||
print('%s: %s' % (os.path.basename(sys.argv[0]), e), file=sys.stderr)
|
||||
@@ -80,6 +86,9 @@ for opt, val in opts:
|
||||
if opt in ('-h', '--help'):
|
||||
print(__doc__)
|
||||
sys.exit(0)
|
||||
elif opt in ('-V', '--version'):
|
||||
print("%s %s" % (program, VERSION))
|
||||
sys.exit(0)
|
||||
elif opt == '--verify':
|
||||
options['do_verify'] = True
|
||||
elif opt in ('--asm', '-a'):
|
||||
@@ -92,13 +101,13 @@ for opt, val in opts:
|
||||
options['showgrammar'] = True
|
||||
elif opt == '-o':
|
||||
outfile = val
|
||||
elif opt == ('--timestamp', '-d'):
|
||||
elif opt in ('--timestamp', '-d'):
|
||||
timestamp = True
|
||||
elif opt == '-c':
|
||||
codes.append(val)
|
||||
elif opt == '-p':
|
||||
numproc = int(val)
|
||||
elif opt == ('--recurse', '-r'):
|
||||
elif opt in ('--recurse', '-r'):
|
||||
recurse_dirs = True
|
||||
else:
|
||||
print(opt, file=sys.stderr)
|
||||
|
@@ -6,7 +6,8 @@ machine:
|
||||
|
||||
dependencies:
|
||||
override:
|
||||
- pip install -r test-requirements.txt
|
||||
- pip install -r requirements.txt
|
||||
- pip install -r requirements-dev.txt
|
||||
test:
|
||||
override:
|
||||
- python ./setup.py develop && make check-2.7
|
||||
|
21
pytest/test_single_compile.py
Normal file
21
pytest/test_single_compile.py
Normal file
@@ -0,0 +1,21 @@
|
||||
import pytest
|
||||
from uncompyle6 import PYTHON_VERSION, PYTHON3, deparse_code
|
||||
|
||||
def test_single_mode():
|
||||
single_expressions = (
|
||||
'i = 1',
|
||||
'i and (j or k)',
|
||||
'i += 1',
|
||||
'i = j % 4',
|
||||
'i = {}',
|
||||
'i = []',
|
||||
'while i < 1 or stop:\n i\n',
|
||||
'while i < 1 or stop:\n print%s\n' % ('(i)' if PYTHON3 else ' i'),
|
||||
'for i in range(10):\n i\n',
|
||||
'for i in range(10):\n for j in range(10):\n i + j\n',
|
||||
'try:\n i\nexcept Exception:\n j\nelse:\n k\n'
|
||||
)
|
||||
|
||||
for expr in single_expressions:
|
||||
code = compile(expr + '\n', '<string>', 'single')
|
||||
assert deparse_code(PYTHON_VERSION, code, compile_mode='single').text == expr + '\n'
|
@@ -1 +1,2 @@
|
||||
pytest
|
||||
flake8
|
1
requirements.txt
Normal file
1
requirements.txt
Normal file
@@ -0,0 +1 @@
|
||||
spark_parser >= 1.1.0
|
@@ -6,3 +6,6 @@ doc_files = README
|
||||
# USAGE.txt
|
||||
# doc/
|
||||
# examples/
|
||||
|
||||
[bdist_wheel]
|
||||
universal=1
|
||||
|
21
setup.py
21
setup.py
@@ -1,32 +1,25 @@
|
||||
#! python
|
||||
#!/usr/bin/env python
|
||||
|
||||
"""Setup script for the 'uncompyle6' distribution."""
|
||||
|
||||
from distutils.core import setup, Extension
|
||||
|
||||
# Get the package information used in setup().
|
||||
# from __pkginfo__ import \
|
||||
# author, author_email, classifiers, \
|
||||
# install_requires, license, long_description, \
|
||||
# modname, packages, py_modules, \
|
||||
# short_desc, version, web, zip_safe
|
||||
|
||||
from __pkginfo__ import \
|
||||
author, author_email, \
|
||||
long_description, \
|
||||
license, long_description, \
|
||||
modname, packages, py_modules, scripts, \
|
||||
short_desc, version, web, zip_safe
|
||||
short_desc, web, zip_safe
|
||||
|
||||
__import__('pkg_resources')
|
||||
from setuptools import setup
|
||||
|
||||
exec(open('uncompyle6/version.py').read())
|
||||
|
||||
setup(
|
||||
author = author,
|
||||
author_email = author_email,
|
||||
# classifiers = classifiers,
|
||||
description = short_desc,
|
||||
# install_requires = install_requires,
|
||||
# license = license,
|
||||
license = license,
|
||||
long_description = long_description,
|
||||
py_modules = py_modules,
|
||||
name = modname,
|
||||
@@ -35,5 +28,5 @@ setup(
|
||||
url = web,
|
||||
setup_requires = ['nose>=1.0'],
|
||||
scripts = scripts,
|
||||
version = version,
|
||||
version = VERSION,
|
||||
zip_safe = zip_safe)
|
||||
|
@@ -19,28 +19,46 @@ check:
|
||||
@$(PYTHON) -V && PYTHON_VERSION=`$(PYTHON) -V 2>&1 | cut -d ' ' -f 2 | cut -d'.' -f1,2`; \
|
||||
$(MAKE) check-$$PYTHON_VERSION
|
||||
|
||||
#: Run working tests from Python 2.6
|
||||
check-2.6: check-bytecode-2.5 check-bytecode-2.7
|
||||
#: Run working tests from Python 2.6 or 2.7
|
||||
check-2.6 check-2.7: check-bytecode-sans-3.5 check-2.7-ok
|
||||
|
||||
#: Run working tests from Python 2.7
|
||||
check-2.7: check-bytecode check-2.7-ok
|
||||
#: Run working tests from Python 3.3
|
||||
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-bytecode-3.4
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.4
|
||||
check-3.4: check-bytecode check-3.4-ok check-2.7-ok
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.4 --verify $(COMPILE)
|
||||
|
||||
#: Check deparsing only, but from a different Python version
|
||||
check-disasm:
|
||||
$(PYTHON) dis-compare.py
|
||||
|
||||
#: Check deparsing bytecode only
|
||||
check-bytecode-2:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.5 --bytecode-2.6 --bytecode-2.7
|
||||
|
||||
#: Check deparsing bytecode only
|
||||
check-bytecode:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.5 --bytecode-2.7 --bytecode-3.2
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.5 --bytecode-2.6 --bytecode-2.7 \
|
||||
--bytecode-3.2 --bytecode-3.3 --bytecode-3.4 --bytecode-3.5
|
||||
|
||||
#: Check deparsing bytecode only
|
||||
check-bytecode-sans-3.5:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.5 --bytecode-2.6 --bytecode-2.7 \
|
||||
--bytecode-3.2 --bytecode-3.3 --bytecode-3.4
|
||||
|
||||
#: Check deparsing Python 2.5
|
||||
check-bytecode-2.5:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.5
|
||||
|
||||
#: Check deparsing Python 2.6
|
||||
check-bytecode-2.6:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.6
|
||||
|
||||
#: Check deparsing Python 2.7
|
||||
check-bytecode-2.7:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-2.7
|
||||
@@ -49,10 +67,18 @@ check-bytecode-2.7:
|
||||
check-bytecode-3.2:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.2
|
||||
|
||||
#: Check deparsing Python 3.3
|
||||
check-bytecode-3.3:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.3
|
||||
|
||||
#: Check deparsing Python 3.4
|
||||
check-bytecode-3.4:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.4
|
||||
|
||||
#: Check deparsing Python 3.5
|
||||
check-bytecode-3.5:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-3.5
|
||||
|
||||
#: short tests for bytecodes only for this version of Python
|
||||
check-native-short:
|
||||
$(PYTHON) test_pythonlib.py --bytecode-$(PYTHON_VERSION) --verify $(COMPILE)
|
||||
@@ -61,6 +87,14 @@ check-native-short:
|
||||
check-2.7-ok:
|
||||
$(PYTHON) test_pythonlib.py --ok-2.7 --verify $(COMPILE)
|
||||
|
||||
#: Run longer Python 3.2's lib files known to be okay
|
||||
check-3.2-ok:
|
||||
$(PYTHON) test_pythonlib.py --ok-3.2 --verify $(COMPILE)
|
||||
|
||||
#: Run longer Python 3.4's lib files known to be okay
|
||||
check-3.4-ok:
|
||||
$(PYTHON) test_pythonlib.py --ok-3.4 --verify $(COMPILE)
|
||||
|
||||
clean: clean-py-dis clean-dis clean-unverified
|
||||
|
||||
clean-dis:
|
||||
|
@@ -1,77 +0,0 @@
|
||||
#!/usr/bin/env python
|
||||
from __future__ import print_function
|
||||
|
||||
"""
|
||||
compile_tests -- compile test patterns for the decompyle test suite
|
||||
"""
|
||||
|
||||
import py_compile, os, sys, getopt
|
||||
|
||||
work_dir = os.path.dirname(sys.argv[0])
|
||||
src_dir = work_dir
|
||||
|
||||
opts, args = getopt.getopt(sys.argv[1:], 's:w:')
|
||||
|
||||
for opt, val in opts:
|
||||
if opt == '-s':
|
||||
src_dir = val
|
||||
if opt == '-w':
|
||||
work_dir = val
|
||||
else:
|
||||
raise "Unknown Option '%s'" % opt
|
||||
if args:
|
||||
raise 'This tool does not want any arguments'
|
||||
|
||||
print("Using files in dir %s" % src_dir)
|
||||
print("Compiling into dir %s" % work_dir)
|
||||
|
||||
tests = {}
|
||||
|
||||
tests['1.5'] = ["class", "del", "docstring", 'empty', "exec",
|
||||
"exceptions", "expressions", "functions", "global",
|
||||
"globals", "import", "integers", "lambda", "loops",
|
||||
"misc", "nested_elif", "prettyprint", "print",
|
||||
'single_stmt', "slices", "tuple_params", 'tuples']
|
||||
|
||||
tests['1.6'] = ["applyEquiv", ] + tests['1.5']
|
||||
|
||||
tests['2.0'] = ["augmentedAssign", "extendedImport", "extendedPrint",
|
||||
"import_as", "listComprehensions", 'print_to'] + \
|
||||
tests['1.6'] # [ "--extendedarg", ]
|
||||
|
||||
tests['2.1'] = ['loops2', 'nested_scopes'] + tests['2.0']
|
||||
|
||||
tests['2.2'] = ['divide_future', 'divide_no_future', 'iterators',
|
||||
'yield'] + tests['2.1']
|
||||
|
||||
tests['2.3'] = tests['2.2']
|
||||
tests['2.5'] = tests['2.3']
|
||||
tests['2.6'] = tests['2.5']
|
||||
tests['2.7'] = ['mine'] + tests['2.6']
|
||||
tests['3.4'] = ['mine']
|
||||
total_tests = len(tests['2.7'])
|
||||
#tests['2.2'].sort(); print tests['2.2']
|
||||
|
||||
extension = '.py' + (__debug__ and 'c' or 'o')
|
||||
|
||||
def compile(file, target_dir):
|
||||
sfile = os.path.join(src_dir, 'test_%s.py' % file)
|
||||
cfile = os.path.join(target_dir, 'test_%s%s' % (file, extension) )
|
||||
py_compile.compile(sfile, cfile=cfile)
|
||||
|
||||
def compile_for_version(version):
|
||||
target_dir = os.path.join(work_dir, 'bytecode_' + version)
|
||||
if not os.path.exists(target_dir):
|
||||
os.mkdir(target_dir)
|
||||
for file in tests[version]:
|
||||
compile(file, target_dir)
|
||||
|
||||
try:
|
||||
version = '%i.%i' % sys.version_info[:2]
|
||||
except AttributeError:
|
||||
version = sys.version[:3]
|
||||
|
||||
print('Compiling test files for Python', version)
|
||||
print('(%i/%i files)' % (len(tests[version]), total_tests))
|
||||
compile_for_version(version)
|
||||
print('Done.')
|
@@ -1,23 +0,0 @@
|
||||
|
||||
def kwfunc(**kwargs):
|
||||
print kwargs.items()
|
||||
|
||||
def argsfunc(*args):
|
||||
print args
|
||||
|
||||
def no_apply(*args, **kwargs):
|
||||
print args
|
||||
print kwargs.items()
|
||||
argsfunc(34)
|
||||
foo = argsfunc(*args)
|
||||
argsfunc(*args)
|
||||
argsfunc(34, *args)
|
||||
kwfunc(**kwargs)
|
||||
kwfunc(x=11, **kwargs)
|
||||
no_apply(*args, **kwargs)
|
||||
no_apply(34, *args, **kwargs)
|
||||
no_apply(x=11, *args, **kwargs)
|
||||
no_apply(34, x=11, *args, **kwargs)
|
||||
no_apply(42, 34, x=11, *args, **kwargs)
|
||||
|
||||
no_apply(1,2,4,8,a=2,b=3,c=5)
|
@@ -1,45 +0,0 @@
|
||||
raise "This program can't be run"
|
||||
|
||||
a = 1
|
||||
b = 2
|
||||
a += b; print a # a = a+b = 3
|
||||
a -= b; print a # a = a-b = 1
|
||||
a *= b; print a # a = a*b = 2
|
||||
a -= a; print a # a = a-a = 0
|
||||
a += 7*3; print a # == 21
|
||||
|
||||
l= [1,2,3]
|
||||
l[1] *= 3; print l[1]; # 6
|
||||
l[1][2][3] = 7
|
||||
l[1][2][3] *= 3;
|
||||
l[:] += [9]; print l
|
||||
l[:2] += [9]; print l
|
||||
l[1:] += [9]; print l
|
||||
l[1:4] += [9]; print l
|
||||
l += [42,43]; print l
|
||||
|
||||
a.value = 1
|
||||
a.value += 1;
|
||||
a.b.val = 1
|
||||
a.b.val += 1;
|
||||
|
||||
l = []
|
||||
for i in range(3):
|
||||
lj = []
|
||||
for j in range(3):
|
||||
lk = []
|
||||
for k in range(3):
|
||||
lk.append(0)
|
||||
lj.append(lk)
|
||||
l.append(lj)
|
||||
|
||||
i = j = k = 1
|
||||
def f():
|
||||
global i
|
||||
i += 1
|
||||
return i
|
||||
|
||||
l[i][j][k] = 1
|
||||
i = 1
|
||||
l[f()][j][k] += 1
|
||||
print i, l
|
@@ -1,34 +0,0 @@
|
||||
|
||||
class A:
|
||||
|
||||
class A1:
|
||||
def __init__(self):
|
||||
print 'A1.__init__'
|
||||
|
||||
def foo(self):
|
||||
print 'A1.foo'
|
||||
|
||||
def __init__(self):
|
||||
print 'A.__init__'
|
||||
|
||||
def foo(self):
|
||||
print 'A.foo'
|
||||
|
||||
|
||||
class B:
|
||||
def __init__(self):
|
||||
print 'B.__init__'
|
||||
|
||||
def bar(self):
|
||||
print 'B.bar'
|
||||
|
||||
|
||||
class C(A,B):
|
||||
def foobar(self):
|
||||
print 'C.foobar'
|
||||
|
||||
|
||||
c = C()
|
||||
c.foo()
|
||||
c.bar()
|
||||
c.foobar()
|
@@ -1,24 +0,0 @@
|
||||
raise "This program can't be run"
|
||||
|
||||
print 0
|
||||
a = b[5]
|
||||
print 1
|
||||
del a
|
||||
print 2
|
||||
del b[5]
|
||||
print 3
|
||||
|
||||
del testme[1]
|
||||
print 4
|
||||
del testme[:]
|
||||
print '4a'
|
||||
del testme[:42]
|
||||
print '4b'
|
||||
del testme[40:42]
|
||||
print 5
|
||||
del testme[2:1024:10]
|
||||
print '5a'
|
||||
del testme[40,41,42]
|
||||
print 6
|
||||
del testme[:42, ..., :24:, 24, 100]
|
||||
print 7
|
@@ -1,6 +0,0 @@
|
||||
from __future__ import division
|
||||
|
||||
print ' 1 // 2 =', 1 // 2
|
||||
print '1.0 // 2.0 =', 1.0 // 2.0
|
||||
print ' 1 / 2 =', 1 / 2
|
||||
print '1.0 / 2.0 =', 1.0 / 2.0
|
@@ -1,6 +0,0 @@
|
||||
#from __future__ import division
|
||||
|
||||
print ' 1 // 2 =', 1 // 2
|
||||
print '1.0 // 2.0 =', 1.0 // 2.0
|
||||
print ' 1 / 2 =', 1 / 2
|
||||
print '1.0 / 2.0 =', 1.0 / 2.0
|
@@ -1,34 +0,0 @@
|
||||
|
||||
'''
|
||||
This is a doc string
|
||||
'''
|
||||
|
||||
def Doc_Test():
|
||||
"""This has to be present"""
|
||||
|
||||
class XXX:
|
||||
def __init__(self):
|
||||
"""__init__: This has to be present"""
|
||||
self.a = 1
|
||||
|
||||
def XXX22():
|
||||
"""XXX22: This has to be present"""
|
||||
pass
|
||||
|
||||
def XXX11():
|
||||
"""XXX22: This has to be present"""
|
||||
pass
|
||||
|
||||
def XXX12():
|
||||
foo = """XXX22: This has to be present"""
|
||||
pass
|
||||
|
||||
def XXX13():
|
||||
pass
|
||||
|
||||
def Y11():
|
||||
def Y22():
|
||||
def Y33():
|
||||
pass
|
||||
|
||||
print __doc__
|
@@ -1,107 +0,0 @@
|
||||
import dis
|
||||
|
||||
def x11():
|
||||
try:
|
||||
a = 'try except'
|
||||
except:
|
||||
a = 2
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x12():
|
||||
try:
|
||||
a = 'try except else(pass)'
|
||||
except:
|
||||
a = 2
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x13():
|
||||
try:
|
||||
a = 'try except else(a=3)'
|
||||
except:
|
||||
a = 2
|
||||
else:
|
||||
a = 3
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x21():
|
||||
try:
|
||||
a = 'try KeyError'
|
||||
except KeyError:
|
||||
a = 8
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x22():
|
||||
try:
|
||||
a = 'try (IdxErr, KeyError) else(pass)'
|
||||
except (IndexError, KeyError):
|
||||
a = 8
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x23():
|
||||
try:
|
||||
a = 'try KeyError else(a=9)'
|
||||
except KeyError:
|
||||
a = 8
|
||||
else:
|
||||
a = 9
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x31():
|
||||
try:
|
||||
a = 'try KeyError IndexError'
|
||||
except KeyError:
|
||||
a = 8
|
||||
except IndexError:
|
||||
a = 9
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x32():
|
||||
try:
|
||||
a = 'try KeyError IndexError else(pass)'
|
||||
except KeyError:
|
||||
a = 8
|
||||
except IndexError:
|
||||
a = 9
|
||||
b = '--------'
|
||||
|
||||
|
||||
def x33():
|
||||
try:
|
||||
a = 'try KeyError IndexError else(a=9)'
|
||||
except KeyError:
|
||||
a = 8
|
||||
except IndexError:
|
||||
a = 9
|
||||
else:
|
||||
a = 9
|
||||
b = '#################'
|
||||
|
||||
|
||||
def x41():
|
||||
if (a == 1):
|
||||
a = 1
|
||||
elif (b == 1):
|
||||
b = 1
|
||||
else:
|
||||
c = 1
|
||||
b = '#################'
|
||||
|
||||
|
||||
def x42():
|
||||
if (a == 1):
|
||||
a = 1
|
||||
elif (b == 1):
|
||||
b = 1
|
||||
else:
|
||||
c = 1
|
||||
xxx = 'mmm'
|
||||
|
||||
if (__name__ == '__main__'):
|
||||
dis.dis(xx)
|
@@ -1,5 +0,0 @@
|
||||
testcode = 'a = 12'
|
||||
|
||||
exec testcode
|
||||
exec testcode in globals()
|
||||
exec testcode in globals(), locals()
|
@@ -1,10 +0,0 @@
|
||||
def _lsbStrToInt(str):
|
||||
return ord(str[0]) + \
|
||||
(ord(str[1]) << 8) + \
|
||||
(ord(str[2]) << 16) + \
|
||||
(ord(str[3]) << 24)
|
||||
|
||||
def test(x):
|
||||
return x
|
||||
|
||||
test(a == b == c == 1)
|
@@ -1,10 +0,0 @@
|
||||
import os, sys as System, time
|
||||
import sys
|
||||
|
||||
from rfc822 import Message as Msg822
|
||||
from mimetools import Message as MimeMsg, decode, choose_boundary as MimeBoundary
|
||||
|
||||
import test.test_StringIO as StringTest
|
||||
|
||||
for k, v in globals().items():
|
||||
print `k`, v
|
@@ -1,6 +0,0 @@
|
||||
import sys
|
||||
|
||||
print >> sys.stdout, "Hello World"
|
||||
print >> sys.stdout, 1,2,3
|
||||
print >> sys.stdout, 1,2,3,
|
||||
print >> sys.stdout
|
File diff suppressed because it is too large
Load Diff
@@ -1,58 +0,0 @@
|
||||
def x0():
|
||||
pass
|
||||
|
||||
def x1(arg1):
|
||||
pass
|
||||
|
||||
def x2(arg1,arg2):
|
||||
pass
|
||||
|
||||
def x3a(*args):
|
||||
pass
|
||||
|
||||
def x3b(**kwargs):
|
||||
pass
|
||||
|
||||
def x3c(*args, **kwargs):
|
||||
pass
|
||||
|
||||
def x4a(foo, bar=1, bla=2, *args):
|
||||
pass
|
||||
|
||||
def x4b(foo, bar=1, bla=2, **kwargs):
|
||||
pass
|
||||
|
||||
def x4c(foo, bar=1, bla=2, *args, **kwargs):
|
||||
pass
|
||||
|
||||
def func_with_tuple_args((a,b)):
|
||||
print a
|
||||
print b
|
||||
|
||||
def func_with_tuple_args2((a,b), (c,d)):
|
||||
print a
|
||||
print c
|
||||
|
||||
def func_with_tuple_args3((a,b), (c,d), *args):
|
||||
print a
|
||||
print c
|
||||
|
||||
def func_with_tuple_args4((a,b), (c,d), **kwargs):
|
||||
print a
|
||||
print c
|
||||
|
||||
def func_with_tuple_args5((a,b), (c,d), *args, **kwargs):
|
||||
print a
|
||||
print c
|
||||
|
||||
def func_with_tuple_args6((a,b), (c,d)=(2,3), *args, **kwargs):
|
||||
print a
|
||||
print c
|
||||
|
||||
def func_ret1():
|
||||
return 1 < 2 < 3
|
||||
|
||||
def read(size=0):
|
||||
if size > 0 and size <= x - cur:
|
||||
return 0
|
||||
return 0
|
@@ -1,16 +0,0 @@
|
||||
i = 1; j = 7
|
||||
def a():
|
||||
def b():
|
||||
def c():
|
||||
k = 34
|
||||
global i
|
||||
i = i+k
|
||||
l = 42
|
||||
c()
|
||||
global j
|
||||
j = j+l
|
||||
b()
|
||||
print i, j # should print 35, 49
|
||||
|
||||
a()
|
||||
print i, j
|
@@ -1,10 +0,0 @@
|
||||
def f():
|
||||
print x # would result in a 'NameError' or 'UnboundLocalError'
|
||||
x = x+1
|
||||
print x
|
||||
|
||||
raise "This program can't be run"
|
||||
|
||||
x = 1
|
||||
f()
|
||||
print x
|
@@ -1,11 +0,0 @@
|
||||
import sys
|
||||
import os, sys, BaseHTTPServer
|
||||
|
||||
import test.test_MimeWriter
|
||||
|
||||
from rfc822 import Message
|
||||
from mimetools import Message, decode, choose_boundary
|
||||
from os import *
|
||||
|
||||
for k, v in globals().items():
|
||||
print `k`, v
|
@@ -1,13 +0,0 @@
|
||||
import sys as SYS
|
||||
import os as OS, sys as SYSTEM, BaseHTTPServer as HTTPServ
|
||||
|
||||
import test.test_MimeWriter as Mime_Writer
|
||||
|
||||
from rfc822 import Message as MSG
|
||||
from mimetools import Message as mimeMsg, decode, \
|
||||
choose_boundary as mimeBoundry
|
||||
|
||||
print '---' * 20
|
||||
|
||||
for k, v in globals().items():
|
||||
print k, repr(v)
|
@@ -1,22 +0,0 @@
|
||||
import sys
|
||||
#raise "This program can't be run"
|
||||
|
||||
i = 1
|
||||
i = 42
|
||||
i = -1
|
||||
i = -42
|
||||
i = sys.maxint
|
||||
minint = -sys.maxint-1
|
||||
print sys.maxint
|
||||
print minint
|
||||
print long(minint)-1
|
||||
|
||||
print
|
||||
i = -2147483647 # == -maxint
|
||||
print i, repr(i)
|
||||
i = i-1
|
||||
print i, repr(i)
|
||||
i = -2147483648L # == minint == -maxint-1
|
||||
print i, repr(i)
|
||||
i = -2147483649L # == minint-1 == -maxint-2
|
||||
print i, repr(i)
|
@@ -1,11 +0,0 @@
|
||||
|
||||
for i in range(20):
|
||||
print i,
|
||||
|
||||
print
|
||||
|
||||
for i in range(10):
|
||||
print i,
|
||||
#if i == 10: break
|
||||
else:
|
||||
print 'The End'
|
@@ -1,8 +0,0 @@
|
||||
palette = map(lambda a: (a,a,a), range(256))
|
||||
palette = map(lambda (r,g,b): chr(r)+chr(g)+chr(b), palette)
|
||||
palette = map(lambda r: r, palette)
|
||||
|
||||
palette = lambda (r,g,b,): r
|
||||
palette = lambda (r): r
|
||||
palette = lambda r: r
|
||||
palette = lambda (r): r, palette
|
@@ -1,30 +0,0 @@
|
||||
XXX = range(4)
|
||||
|
||||
print [i for i in XXX]
|
||||
print
|
||||
print [i for i in (1,2,3,4,)]
|
||||
print
|
||||
print [i for i in [1,2,3,4,]]
|
||||
print
|
||||
print [(i,1) for i in XXX]
|
||||
print
|
||||
print [i*2 for i in range(4)]
|
||||
print
|
||||
print [i*j for i in range(4)
|
||||
for j in range(7)]
|
||||
print [i*2 for i in range(4) if i == 0 ]
|
||||
print [(i,i**2) for i in range(4) if (i % 2) == 0 ]
|
||||
print [i*j for i in range(4)
|
||||
if i == 2
|
||||
for j in range(7)
|
||||
if (i+i % 2) == 0 ]
|
||||
|
||||
seq1 = 'abc'
|
||||
seq2 = (1,2,3)
|
||||
|
||||
[ (x,y) for x in seq1 for y in seq2 ]
|
||||
|
||||
def flatten1(seq):
|
||||
return [x for subseq in seq for x in subseq]
|
||||
|
||||
print flatten1([[0], [1,2,3], [4,5], [6,7,8,9], []])
|
@@ -1,58 +0,0 @@
|
||||
for i in range(10):
|
||||
if i == 3:
|
||||
continue
|
||||
if i == 5:
|
||||
break
|
||||
print i,
|
||||
else:
|
||||
print 'Else'
|
||||
print
|
||||
|
||||
for i in range(10):
|
||||
if i == 3:
|
||||
continue
|
||||
print i,
|
||||
else:
|
||||
print 'Else'
|
||||
|
||||
i = 0
|
||||
while i < 10:
|
||||
i = i+1
|
||||
if i == 3:
|
||||
continue
|
||||
if i == 5:
|
||||
break
|
||||
print i,
|
||||
else:
|
||||
print 'Else'
|
||||
print
|
||||
|
||||
i = 0
|
||||
while i < 10:
|
||||
i = i+1
|
||||
if i == 3:
|
||||
continue
|
||||
print i,
|
||||
else:
|
||||
print 'Else'
|
||||
|
||||
for x, y in [(1,2),(3,4)]:
|
||||
if x in ['==', '>=', '>']:
|
||||
if '0' in y:
|
||||
print
|
||||
|
||||
for x in (1, 2, 3):
|
||||
if x == 1:
|
||||
print x
|
||||
|
||||
i = 0
|
||||
while i < 10:
|
||||
i+=1
|
||||
for x in (1,2,3):
|
||||
for y in (1,2,3):
|
||||
if x == y and x == 1:
|
||||
while i < 10:
|
||||
print x
|
||||
break
|
||||
|
||||
|
@@ -1,10 +0,0 @@
|
||||
# This is a seperate test pattern, since 'continue' within 'try'
|
||||
# was not allowed till Python 2.1
|
||||
|
||||
for term in args:
|
||||
try:
|
||||
print
|
||||
continue
|
||||
print
|
||||
except:
|
||||
pass
|
@@ -1,5 +0,0 @@
|
||||
sum(i*i for i in range(10))
|
||||
|
||||
sum(x*y for x,y in zip(xvec, yvec))
|
||||
|
||||
|
@@ -1,23 +0,0 @@
|
||||
raise "This program can't be run"
|
||||
|
||||
class A:
|
||||
def __init__(self, num):
|
||||
self.num = num
|
||||
def __repr__(self):
|
||||
return str(self.num)
|
||||
|
||||
b = []
|
||||
for i in range(10):
|
||||
b.append(A(i))
|
||||
|
||||
for i in ('CALL_FUNCTION', 'CALL_FUNCTION_VAR',
|
||||
'CALL_FUNCTION_VAR_KW', 'CALL_FUNCTION_KW'):
|
||||
print i, '\t', len(i), len(i)-len('CALL_FUNCTION'),
|
||||
print (len(i)-len('CALL_FUNCTION')) / 3,
|
||||
print i[len('CALL_FUNCTION'):]
|
||||
|
||||
p2 = (0, 0, None)
|
||||
if p2[2]:
|
||||
print 'has value'
|
||||
else:
|
||||
print ' no value'
|
@@ -1,81 +0,0 @@
|
||||
a = None
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
elif a == 2:
|
||||
print '2'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
elif a == 2:
|
||||
print '2'
|
||||
else:
|
||||
print 'other'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
elif a == 2:
|
||||
print '2'
|
||||
elif a == 3:
|
||||
print '3'
|
||||
else:
|
||||
print 'other'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
elif a == 2:
|
||||
print '2'
|
||||
elif a == 3:
|
||||
print '3'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
else:
|
||||
if a == 2:
|
||||
print '2'
|
||||
else:
|
||||
if a == 3:
|
||||
print '3'
|
||||
else:
|
||||
print 'other'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
else:
|
||||
if a == 2:
|
||||
print '2'
|
||||
else:
|
||||
print 'more'
|
||||
if a == 3:
|
||||
print '3'
|
||||
else:
|
||||
print 'other'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
else:
|
||||
print 'more'
|
||||
if a == 2:
|
||||
print '2'
|
||||
else:
|
||||
if a == 3:
|
||||
print '3'
|
||||
else:
|
||||
print 'other'
|
||||
|
||||
if a == 1:
|
||||
print '1'
|
||||
else:
|
||||
print 'more'
|
||||
if a == 2:
|
||||
print '2'
|
||||
else:
|
||||
print 'more'
|
||||
if a == 3:
|
||||
print '3'
|
||||
elif a == 4:
|
||||
print '4'
|
||||
elif a == 4:
|
||||
print '4'
|
||||
else:
|
||||
print 'other'
|
@@ -1,87 +0,0 @@
|
||||
from __future__ import nested_scopes
|
||||
|
||||
blurb = 1
|
||||
|
||||
def k0():
|
||||
def l0(m=1):
|
||||
print
|
||||
l0()
|
||||
|
||||
def x0():
|
||||
def y0():
|
||||
print
|
||||
y0()
|
||||
|
||||
def x1():
|
||||
def y1():
|
||||
print 'y-blurb =', blurb
|
||||
y1()
|
||||
|
||||
def x2():
|
||||
def y2():
|
||||
print
|
||||
blurb = 2
|
||||
y2()
|
||||
|
||||
def x3a():
|
||||
def y3a(x):
|
||||
print 'y-blurb =', blurb, flurb
|
||||
print
|
||||
blurb = 3
|
||||
flurb = 7
|
||||
y3a(1)
|
||||
print 'x3a-blurb =', blurb
|
||||
|
||||
def x3():
|
||||
def y3(x):
|
||||
def z():
|
||||
blurb = 25
|
||||
print 'z-blurb =', blurb,
|
||||
z()
|
||||
print 'y-blurb =', blurb,
|
||||
print
|
||||
blurb = 3
|
||||
y3(1)
|
||||
print 'x3-blurb =', blurb
|
||||
|
||||
def x3b():
|
||||
def y3b(x):
|
||||
def z():
|
||||
print 'z-blurb =', blurb,
|
||||
blurb = 25
|
||||
z()
|
||||
print 'y-blurb =', blurb,
|
||||
print
|
||||
blurb = 3
|
||||
y3b(1)
|
||||
print 'x3-blurb =', blurb
|
||||
|
||||
def x4():
|
||||
def y4(x):
|
||||
def z():
|
||||
print 'z-blurb =', blurb
|
||||
z()
|
||||
global blurb
|
||||
blurb = 3
|
||||
y4(1)
|
||||
|
||||
def x():
|
||||
def y(x):
|
||||
print 'y-blurb =', blurb
|
||||
blurb = 2
|
||||
y(1)
|
||||
|
||||
|
||||
def func_with_tuple_args6((a,b), (c,d)=(2,3), *args, **kwargs):
|
||||
def y(x):
|
||||
print 'y-a =', a
|
||||
print c
|
||||
|
||||
def find(self, name):
|
||||
# This is taken from 'What's new in Python 2.1' by amk
|
||||
L = filter(lambda x, name: x == name, self.list_attribute)
|
||||
|
||||
x0(); x1(); x2();
|
||||
x3(); x3a(); x3b();
|
||||
x4(); x()
|
||||
print 'blurb =', blurb
|
@@ -1,128 +0,0 @@
|
||||
import pprint
|
||||
|
||||
aa = 'aa'
|
||||
|
||||
dict0 = {
|
||||
'a': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'b': 1234,
|
||||
'd': aa,
|
||||
aa: aa
|
||||
}
|
||||
|
||||
|
||||
dict = {
|
||||
'a': 'aaa',
|
||||
'b': 1234,
|
||||
'c': { 'ca': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'cb': 1234,
|
||||
'cc': None
|
||||
},
|
||||
'd': aa,
|
||||
aa: aa,
|
||||
'eee': { 'ca': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'cb': 1234,
|
||||
'cc': None
|
||||
},
|
||||
'ff': aa,
|
||||
}
|
||||
list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
[ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ],
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ),
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
|
||||
def funcA():
|
||||
dict = {
|
||||
'a': 'aaa',
|
||||
'b': 1234,
|
||||
'c': { 'ca': 'aaa',
|
||||
'cb': 1234,
|
||||
'cc': None
|
||||
},
|
||||
'd': aa,
|
||||
aa: aa
|
||||
}
|
||||
list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
aa,
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
[ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ],
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
aa,
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
aa,
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ),
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
|
||||
def funcAB():
|
||||
dict = {
|
||||
'a': 'aaa',
|
||||
'b': 1234,
|
||||
'c': { 'ca': 'aaa',
|
||||
'cb': 1234,
|
||||
'cc': None
|
||||
},
|
||||
'd': aa,
|
||||
aa: aa
|
||||
}
|
||||
list1 = [ '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
list2 = [ '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
[ '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ],
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' ]
|
||||
tuple1 = ( '1aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'1bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'1ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
tuple2 = ( '2aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
( '22aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa',
|
||||
'22bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'22ccccccccccccccccccccccccccccccccccccccccccc' ),
|
||||
'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb',
|
||||
'ccccccccccccccccccccccccccccccccccccccccccc' )
|
||||
|
||||
pprint.pprint(dict0)
|
||||
print
|
||||
pprint.pprint(dict)
|
||||
print
|
||||
|
||||
pprint = pprint.PrettyPrinter(indent=2)
|
||||
pprint.pprint(dict0)
|
||||
print
|
||||
pprint.pprint(dict)
|
||||
print
|
||||
|
||||
pprint.pprint(list1)
|
||||
print
|
||||
pprint.pprint(list2)
|
@@ -1,9 +0,0 @@
|
||||
|
||||
print 1,2,3,4,5
|
||||
a = b + 5
|
||||
print 1,2,3,4,5
|
||||
print 1,2,3,4,5
|
||||
print
|
||||
print
|
||||
print 1,2,3,4,5
|
||||
print
|
@@ -1,13 +0,0 @@
|
||||
|
||||
import sys
|
||||
|
||||
print >>sys.stdout, 1,2,3,4,5
|
||||
|
||||
print >>sys.stdout, 1,2,3,4,5,
|
||||
print >>sys.stdout
|
||||
|
||||
print >>sys.stdout, 1,2,3,4,5,
|
||||
print >>sys.stdout, 1,2,3,4,5,
|
||||
print >>sys.stdout
|
||||
|
||||
print >>sys.stdout
|
@@ -1 +0,0 @@
|
||||
print 5
|
@@ -1,32 +0,0 @@
|
||||
raise "This program can't be run"
|
||||
|
||||
testme[1]
|
||||
testme[1] = 1
|
||||
del testme[1]
|
||||
|
||||
testme[:42]
|
||||
testme[:42] = "The Answer"
|
||||
del testme[:42]
|
||||
|
||||
testme[2:1024:]
|
||||
testme[:1024:10]
|
||||
testme[::]
|
||||
testme[2:1024:10]
|
||||
testme[2:1024:10] = "A lot"
|
||||
del testme[2:1024:10]
|
||||
|
||||
testme[:42, ..., :24:, 24, 100]
|
||||
testme[:42, ..., :24:, 24, 100] = "Strange"
|
||||
del testme[:42, ..., :24:, 24, 100]
|
||||
|
||||
testme[:]
|
||||
testme[:] = 'Take all'
|
||||
del testme[:]
|
||||
|
||||
testme[40:42]
|
||||
testme[40:42] = 'Three'
|
||||
del testme[40:42]
|
||||
|
||||
testme[40,41,42]
|
||||
testme[40,41,42] = 'Another Three'
|
||||
del testme[40,41,42]
|
@@ -1,14 +0,0 @@
|
||||
def A(a,b,(x,y,z),c):
|
||||
pass
|
||||
|
||||
def B(a,b=42,(x,y,z)=(1,2,3),c=17):
|
||||
pass
|
||||
|
||||
def C((x,y,z)):
|
||||
pass
|
||||
|
||||
def D((x,)):
|
||||
pass
|
||||
|
||||
def E((x)):
|
||||
pass
|
@@ -1,20 +0,0 @@
|
||||
a = (1,)
|
||||
b = (2,3)
|
||||
a,b = (1,2)
|
||||
a,b = ( (1,2), (3,4,5) )
|
||||
|
||||
x = {}
|
||||
try:
|
||||
x[1,2,3]
|
||||
except:
|
||||
pass
|
||||
|
||||
x[1,2,3] = 42
|
||||
print x[1,2,3]
|
||||
print x[(1,2,3)]
|
||||
assert x[(1,2,3)] == x[1,2,3]
|
||||
del x[1,2,3]
|
||||
|
||||
x=[1,2,3]
|
||||
b=(1 for i in x if i)
|
||||
b=(e for i in range(4) if i == 2)
|
@@ -1,22 +0,0 @@
|
||||
from __future__ import generators
|
||||
|
||||
def inorder(t):
|
||||
if t:
|
||||
for x in inorder(t.left):
|
||||
yield x
|
||||
yield t.label
|
||||
for x in inorder(t.right):
|
||||
yield x
|
||||
|
||||
def generate_ints(n):
|
||||
for i in range(n):
|
||||
yield i*2
|
||||
|
||||
for i in generate_ints(5):
|
||||
print i,
|
||||
print
|
||||
gen = generate_ints(3)
|
||||
print gen.next(),
|
||||
print gen.next(),
|
||||
print gen.next(),
|
||||
print gen.next()
|
BIN
test/bytecode_2.5/10_if_else_ternary.pyc
Normal file
BIN
test/bytecode_2.5/10_if_else_ternary.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/00_assign.pyc
Normal file
BIN
test/bytecode_2.6/00_assign.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/00_import.pyc
Normal file
BIN
test/bytecode_2.6/00_import.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/00_pass.pyc
Normal file
BIN
test/bytecode_2.6/00_pass.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/01_class.pyc
Normal file
BIN
test/bytecode_2.6/01_class.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/01_list_comprehension.pyc
Normal file
BIN
test/bytecode_2.6/01_list_comprehension.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/01_positional.pyc
Normal file
BIN
test/bytecode_2.6/01_positional.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/01_try_except.pyc
Normal file
BIN
test/bytecode_2.6/01_try_except.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/02_def.pyc
Normal file
BIN
test/bytecode_2.6/02_def.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/02_slice.pyc
Normal file
BIN
test/bytecode_2.6/02_slice.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/05_if.pyc
Normal file
BIN
test/bytecode_2.6/05_if.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/05_ifelse.pyc
Normal file
BIN
test/bytecode_2.6/05_ifelse.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/05_try_except.pyc
Normal file
BIN
test/bytecode_2.6/05_try_except.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_class.pyc
Normal file
BIN
test/bytecode_2.6/10_class.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_for.pyc
Normal file
BIN
test/bytecode_2.6/10_for.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_if_else_ternary.pyc
Normal file
BIN
test/bytecode_2.6/10_if_else_ternary.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_keyword.pyc
Normal file
BIN
test/bytecode_2.6/10_keyword.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_mixed_boolean.pyc
Normal file
BIN
test/bytecode_2.6/10_mixed_boolean.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/10_while.pyc
Normal file
BIN
test/bytecode_2.6/10_while.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/15_assert.pyc
Normal file
BIN
test/bytecode_2.6/15_assert.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/15_for_if.pyc
Normal file
BIN
test/bytecode_2.6/15_for_if.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/20_try_except.pyc
Normal file
BIN
test/bytecode_2.6/20_try_except.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_2.6/25_try_except.pyc
Normal file
BIN
test/bytecode_2.6/25_try_except.pyc
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
test/bytecode_2.7/10_if_else_ternary.pyc
Normal file
BIN
test/bytecode_2.7/10_if_else_ternary.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/00_assign.pyc
Normal file
BIN
test/bytecode_3.2/00_assign.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/00_import.pyc
Normal file
BIN
test/bytecode_3.2/00_import.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/00_pass.pyc
Normal file
BIN
test/bytecode_3.2/00_pass.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/01_boolean.pyc
Normal file
BIN
test/bytecode_3.2/01_boolean.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/01_list_comprehension.pyc
Normal file
BIN
test/bytecode_3.2/01_list_comprehension.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/01_positional.pyc
Normal file
BIN
test/bytecode_3.2/01_positional.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/01_try_except.pyc
Normal file
BIN
test/bytecode_3.2/01_try_except.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/02_def.pyc
Normal file
BIN
test/bytecode_3.2/02_def.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/02_slice.pyc
Normal file
BIN
test/bytecode_3.2/02_slice.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/05_if.pyc
Normal file
BIN
test/bytecode_3.2/05_if.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/05_ifelse.pyc
Normal file
BIN
test/bytecode_3.2/05_ifelse.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/05_list_comprehension.pyc
Normal file
BIN
test/bytecode_3.2/05_list_comprehension.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/06_classbug.pyc
Normal file
BIN
test/bytecode_3.2/06_classbug.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/10_for.pyc
Normal file
BIN
test/bytecode_3.2/10_for.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/10_keyword.pyc
Normal file
BIN
test/bytecode_3.2/10_keyword.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/10_while.pyc
Normal file
BIN
test/bytecode_3.2/10_while.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/15_assert.pyc
Normal file
BIN
test/bytecode_3.2/15_assert.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.2/15_for_if.pyc
Normal file
BIN
test/bytecode_3.2/15_for_if.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