diff --git a/ChangeLog b/ChangeLog index 7887193c..c3ecbc04 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,402 @@ +2017-05-06 rocky + + * uncompyle6/version.py: Get ready for release 2.9.11 + +2017-05-06 rocky + + * test/Makefile: fix PYTHON variable setting in test/Makefile + +2017-05-06 rocky + + * test/simple_source/bug32/01_try_except_raise.py, + test/simple_source/bug32/03_if.py, uncompyle6/parsers/parse32.py, + uncompyle6/parsers/parse33.py: Fix more Python3.2 parser errors + +2017-05-05 rocky + + * uncompyle6/parsers/parse32.py, uncompyle6/scanners/scanner3.py: + Improve Python 3.2 decompilation ... by removing a lot of the control-flow labels of 3.3+ + +2017-05-05 rocky + + * .travis.yml: Try CI testing on Python 3.6 + +2017-05-02 rocky + + * test/simple_source/bug35/01_map_unpack.py, uncompyle6/parser.py, + uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py, + uncompyle6/semantics/pysource.py: Bang more on BUIlD_MAP_UNPACK there are still bugs. Note: {**{'x': 1}, **{'y': 2}} and {{'x': 1}, **{'y': 2}} generate the same Python 3.5+ bytecode. + +2017-05-02 rocky + + * test/simple_source/bug35/01_map_unpack.py, uncompyle6/parser.py, + uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py: + BUILD_MAP_UNPACK'ing of dictionaries in 3.5 + +2017-05-01 rocky + + * uncompyle6/semantics/pysource.py: Remove extra unpack *. Issue #98 + +2017-04-29 R. Bernstein + + * HISTORY.md: Update HISTORY.md + +2017-04-29 rocky + + * test/simple_source/bug35/01_map_unpack.py, + uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.py: + Handle BUILD_MAP_UNPACK in a build_list + +2017-04-27 rocky + + * uncompyle6/semantics/pysource.py: A hacky way to get + CALL_FUNCTION_EX_KW to work. + +2017-04-26 rocky + + * uncompyle6/semantics/pysource.py: remove debug code + +2017-04-25 rocky + + * test/simple_source/bug36/01_call_function.py, + uncompyle6/parsers/parse36.py, uncompyle6/scanners/scanner36.py, + uncompyle6/semantics/pysource.py: Python 3.6 CALL_FUNCTION_EX first + attempt + +2017-04-22 rocky + + * uncompyle6/parser.py, uncompyle6/parsers/parse34.py: Reduse scope + of LOAD_ASSERT as expr to 3.4+ + +2017-04-22 rocky + + * uncompyle6/parser.py, uncompyle6/verify.py: LOAD_ASSERT can also + be an expr This may have the undesirable property that assert statements might + get tagged with equivalant low-level Python code that uses "raise + AssertionError", but so be it. Fixes #103 + +2017-04-22 R. Bernstein + + * HISTORY.md: Update HISTORY.md + +2017-04-22 R. Bernstein + + * HISTORY.md: Update HISTORY.md + +2017-04-22 rocky + + * history.md: history keeps gettting amended + +2017-04-22 rocky + + * readme.rst: document python 3.x status + +2017-04-22 rocky + + * test/simple_source/bug35/03_async_await.py, + uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.py: add + await expr fixes #111 + +2017-04-22 rocky + + * : update test + +2017-04-22 rocky + + * test/simple_source/bug33/02_pos_args.py, + uncompyle6/parsers/parse3.py, uncompyle6/semantics/make_function.py: + 3.3+ bug in handling single kwarg after * towards fixing issue #110 + +2017-04-20 rocky + + * test/simple_source/bug35/02_async_for.py, + uncompyle6/parsers/parse35.py: add async for with pass statement fixes #109 + +2017-04-19 rocky + + * test/simple_source/bug35/03_while-if-break.py, + uncompyle6/parsers/parse3.py: 3.5 ifelsestmtl grammar bug. fixes #108 + +2017-04-18 rocky + + * test/simple_source/bug35/03_async_await.py, + uncompyle6/parsers/parse35.py: expand await stmt handling fixes #107 + +2017-04-18 rocky + + * test/simple_source/bug33/01_delete_deref.py, + uncompyle6/parsers/parse32.py, uncompyle6/semantics/pysource.py: add + delete_deref grammar rule fixes issue #106 + +2017-04-17 rocky + + * test/simple_source/bug36/01_extended_arg.py, + test/simple_source/bug36/01_if_file.py: rename test case to + something more appropriate + +2017-04-17 rocky + + * test/simple_source/bug36/01_if_file.py: fix botched test case thanks to zm908 for pointing this out + +2017-04-16 rocky + + * uncompyle6/parsers/parse3.py: comment on what's up with last + change + +2017-04-16 rocky + + * test/simple_source/bug22/03_if1.py, + test/simple_source/bug31/02_ifelse_comprehension.py, + uncompyle6/parsers/parse3.py: python 3.x ifelse in comprehension fixes issue #91 + +2017-04-16 rocky + + * : add 2.7 complex test + +2017-04-15 rocky + + * test/simple_source/bug35/01_map_unpack.py, + uncompyle6/semantics/pysource.py: correct bug in 3.5+ build_list + with unpack + +2017-04-15 r. bernstein + + * how-to-report-a-bug.md: update how-to-report-a-bug.md + +2017-04-15 r. bernstein + + * how-to-report-a-bug.md: update how-to-report-a-bug.md + +2017-04-15 rocky + + * test/simple_source/bug36/01_if_file.py, + uncompyle6/parsers/parse36.py: 3.6 generates wonky extended_arg in + expression fixes issue #102 + +2017-04-15 rocky + + * how-to-report-a-bug.md, manifest.in: add how to report a bug add test case for ... if 1 else ... + +2017-04-14 rocky + + * test/simple_source/bug35/01_map_unpack.py, + uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py, + uncompyle6/semantics/pysource.py: python 3.5+ build_unmap_pack rules towards addressing issue #98 + +2017-04-14 rocky + + * uncompyle6/scanners/scanner3.py: reduce adding return_end_if in + 3.5+ the whole control flow determination has to be redone in a less + haphazard way using real flow-control analysis. hopefully that's on + the way. in the meantime we have this hack. + +2017-04-14 rocky + + * test/simple_source/bug27+/03_if_1_else.py, + test/simple_source/bug27+/03_if_true_else.py: better names for a + test + +2017-04-13 rocky + + * test/simple_source/bug27+/03_if_true_else.py, + uncompyle6/parser.py, uncompyle6/parsers/parse3.py, + uncompyle6/semantics/consts.py: add if1else. fixes #101 + +2017-04-13 rocky + + * uncompyle6/parsers/parse3.py: in 3.x come_from should include + come_from_except + +2017-04-13 rocky + + * uncompyle6/parsers/parse35.py: towards fixing issue #92 + +2017-04-13 rocky + + * uncompyle6/parsers/parse23.py, uncompyle6/semantics/pysource.py: + add python 2.3 rule for "if 1: ..." fully fixes #97 for python 2.3. python 2.4 was fixed in a previous + commit. + +2017-04-12 rocky + + * uncompyle6/parsers/parse3.py, + uncompyle6/semantics/make_function.py: annotate args type need to be + expr's not constants + +2017-04-12 rocky + + * uncompyle6/parsers/parse24.py: handle python 2.4 "if 1...." + +2017-04-11 rocky + + * test/simple_source/bug31/04_def_annotate.py, + uncompyle6/semantics/fragments.py, + uncompyle6/semantics/make_function.py: bang on 3.x annotations + +2017-04-11 rocky + + * test/simple_source/bug31/04_def_annotate.py, + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + towards fixing annotated decorator functions... and annotate functions + +2017-04-10 rocky + + * uncompyle6/parsers/parse2.py, uncompyle6/scanners/scanner27.py, + uncompyle6/semantics/check_ast.py, uncompyle6/semantics/pysource.py: + misc bugs parse2.py: restore accidently-removed while1stmt rule scanner27.py: + grammar typo check_ast: add while1else to list of looping constructs + pysource.py: call_function_var_kw_args with positional args rule is + different? + +2017-04-10 rocky + + * test/simple_source/stmts/02_while1else.py, + uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, + uncompyle6/parsers/parse35.py: add more while1else grammar rules towards addressing issue #93 + +2017-04-09 rocky + + * : one more function_var test for 3.3 + +2017-04-09 rocky + + * test/simple_source/def/10_kw+pos_args-bug.py, + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + another python 3.5 function_var bug fixes #94 + +2017-04-09 rocky + + * : commit 4199bc7f617e387fb03fc06939cd17366dc15c5e author: rocky + date: sun apr 9 05:30:45 2017 -0400 + +2017-04-03 rocky + + * : commit 6773a66b99d07e48290a77dbbbe3c71cc39c31ba author: rocky + date: mon apr 3 06:53:12 2017 -0400 + +2017-03-27 rocky + + * : commit a91cd716670be09d3cef34e1bb36a67f96f91712 author: rocky + date: mon mar 27 07:08:59 2017 -0400 + +2017-03-19 rocky + + * __pkginfo__.py: use more-recent xdis + +2017-03-15 rocky + + * history.md, test/simple_source/bug33/01_if_try_except.py: grammar + typo and add another test + +2017-03-12 rocky + + * uncompyle6/scanners/scanner3.py: python 3.0 doesn't have + pop_jump_if... + +2017-03-12 rocky + + * readme.rst: note problem in handling pathologically long lists + +2017-03-07 rocky + + * uncompyle6/scanners/scanner3.py: small cleanup - remove + pop_jump_tf + +2017-03-05 rocky + + * pytest/test_grammar.py, uncompyle6/parsers/parse3.py, + uncompyle6/parsers/parse33.py, uncompyle6/scanners/scanner3.py: more + accurate ranges of try blocks in 3.x + +2017-03-05 rocky + + * test/simple_source/bug33/01_try_except.py: more accurate ranges of + try blocks in 3.x + +2017-03-04 r. bernstein + + * : merge pull request #84 from + moagstar/property_based_test_function_call property based test function call + +2017-03-04 rocky + + * readme.rst: readme updates for 3.5 and 1.5 + +2017-03-04 rocky + + * test/simple_source/bug32/01_named_and_kwargs.py, + uncompyle6/parsers/parse3.py: bug found by hypothesis in creating + function calls + +2017-03-04 daniel bradburn + + * pytest/test_function_call.py: marked all function call tests as + failing until they pass across all python versions + +2017-03-04 daniel bradburn + + * pytest/test_function_call.py: added minimal examples for various + function call opcodes + +2017-03-04 daniel bradburn + + * pytest/test_function_call.py: added property based test for + verifying uncompylation of function calls. a number of minimal + examples for the various function call opcodes have been generated + with the majority marked as expected failure until python 3.6 opcode + support is complete. i'm hoping this will make it easier to figure + out what needs to be done to support the new opcodes and changed + semntics for function calls + +2017-03-03 daniel bradburn + + * pytest/test_function_call.py: reduced errors when generating + function call instances + +2017-03-03 daniel bradburn + + * pytest/test_function_call.py: added test file for function calls + +2017-03-03 daniel bradburn + + * .gitignore: added .idea to gitignore + +2017-03-03 daniel bradburn + + * .gitignore: added .venv to gitignore + +2017-03-01 rocky + + * uncompyle6/scanner.py, uncompyle6/scanners/scanner2.py, + uncompyle6/scanners/scanner3.py, uncompyle6/verify.py: come_from for + 3.x pop_except, dry with op_name() ... start adding come_froms for pop_except in preparation for getting + tryelse blocks correct. simpler opname access functions: - self.op_name(op) is self.opc.opname[op] - self.op_name_from_offset(offset) is + self.opc.opname[self.code[offset]] verify.py: not all offsets are ints + +2017-02-28 rocky + + * readme.rst, uncompyle6/parser.py, uncompyle6/parsers/parse26.py: + python 2.6 a == b or c == d == 3 grammar bug + +2017-02-28 rocky + + * : 2.6 a == b or x == y == z bug + +2017-02-28 rocky + + * test/simple_source/bug26/03_double_equals.py, + uncompyle6/semantics/consts.py: predidence of cmp_list: x == y == z the x, y, z should not have parenthesis around pairs of them (x == + y) or (y == z) + +2017-02-28 rocky + + * uncompyle6/parser.py, uncompyle6/parsers/parse27.py: python 2.7 + check jump targets of "and" + 2017-02-25 rocky - * uncompyle6/version.py: Get ready for release 2.9.10 + * ChangeLog, NEWS, __pkginfo__.py, uncompyle6/version.py: Get ready + for release 2.9.10 2017-02-25 rocky @@ -30,7 +426,7 @@ 2017-02-20 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py: + * uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse35.py: Python 3.x needs more "while 1" grammar rules 2017-02-20 rocky @@ -160,7 +556,7 @@ 2017-01-15 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Handle 3.6 BUILD_CONST_KEYMAP 2017-01-15 rocky @@ -193,7 +589,7 @@ 2017-01-10 rocky * test/simple_source/bug35/03_double_star_unpack.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Improve BUILD_xxx_UNPACK slightly 2017-01-09 rocky @@ -212,7 +608,7 @@ 2017-01-08 rocky - * uncompyle6/parsers/parse30.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse30.py, uncompyle6/scanners/scanner3.py: Python 3.0 decompile bugs 2017-01-08 rocky @@ -243,7 +639,7 @@ 2017-01-07 rocky * test/simple_source/bug35/03_async_await.py, - uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.py: Start to add 3.5+ await and async 2017-01-07 rocky @@ -280,7 +676,7 @@ 2017-01-02 rocky - * uncompyle6/parsers/parse35.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse35.py, uncompyle6/scanners/scanner3.py: Python 3.5 continue detection bug 2017-01-01 rocky @@ -290,7 +686,7 @@ 2017-01-01 rocky - * uncompyle6/parsers/parse35.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse35.py, uncompyle6/scanners/scanner3.py: Towards fixing Python 3.5 return bugs 2017-01-01 rocky @@ -317,12 +713,12 @@ 2016-12-29 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py: dectect_structure() -> detect_control_flow() 2016-12-29 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py: + * 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 @@ -359,7 +755,7 @@ 2016-12-27 rocky * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner26.py, uncompyle6/semantics/pysource.py: WIP : Add THEN to disambigute from "and" 2016-12-27 rocky @@ -404,7 +800,7 @@ 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: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Lint 2016-12-24 rocky @@ -421,7 +817,7 @@ * 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: + 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 @@ -432,7 +828,7 @@ 2016-12-17 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner25.py: + * 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 @@ -521,7 +917,7 @@ 2016-11-28 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse36.py: + * uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse36.py: Shorten Python3 grammars with + and * 2016-11-28 rocky @@ -560,7 +956,7 @@ 2016-11-24 rocky * uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py, - uncompyle6/semantics/helper.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/helper.py, uncompyle6/semantics/pysource.py: 2.7 grammar bug workaround. Fix docstring bug 2016-11-24 rocky @@ -570,7 +966,7 @@ 2016-11-24 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py: + * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py: <2.7 "if" detection and dup Python 3 grammar rule 2016-11-23 rocky @@ -653,7 +1049,7 @@ 2016-11-20 rocky * pytest/test_fjt.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.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 @@ -669,7 +1065,7 @@ 2016-11-16 rocky * test/simple_source/bug26/03_if_vs_and.py, uncompyle6/main.py, - uncompyle6/semantics/check_ast.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/check_ast.py, uncompyle6/semantics/pysource.py: More AST checking Small fixes in output format 2016-11-15 rocky @@ -689,17 +1085,17 @@ 2016-11-14 rocky - * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: + * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: WIP remove COME_FROMs around ignore_if's 2016-11-14 rocky - * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: + * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: WIP remove COME_FROMs around ignore_if's 2016-11-14 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + * 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 @@ -735,7 +1131,7 @@ 2016-11-11 rocky * uncompyle6/parser.py, uncompyle6/semantics/check_ast.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.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) @@ -755,7 +1151,7 @@ 2016-11-10 rocky * uncompyle6/main.py, uncompyle6/semantics/check_ast.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.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. @@ -822,7 +1218,7 @@ 2016-10-30 rocky - * .gitignore, README.rst, test/simple_source/def/03_class_method.py: + * .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 @@ -851,20 +1247,20 @@ * pytest/test_grammar.py, uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse31.py, uncompyle6/parsers/parse32.py, - uncompyle6/parsers/parse35.py, uncompyle6/semantics/pysource.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 * pytest/test_grammar.py, uncompyle6/parsers/parse3.py, uncompyle6/parsers/parse32.py, uncompyle6/parsers/parse33.py, - uncompyle6/parsers/parse34.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse34.py, uncompyle6/semantics/pysource.py: Expand annotate return to Python 3.4 2016-10-28 rocky * pytest/test_grammar.py, uncompyle6/parsers/parse31.py, - uncompyle6/parsers/parse32.py, uncompyle6/semantics/pysource.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 @@ -878,7 +1274,7 @@ * test/simple_source/bug31/04_def_annotate.py, test/simple_source/bug31/04_def_attr.py, - uncompyle6/parsers/parse31.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse31.py, uncompyle6/semantics/pysource.py: Clean and fix Python 3 annotate arg return 2016-10-26 rocky @@ -953,7 +1349,7 @@ 2016-10-20 moagstar * pytest/test_fstring.py, uncompyle6/parsers/parse3.py, - uncompyle6/parsers/parse36.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse36.py, uncompyle6/semantics/pysource.py: further work on supporting single and multiple fstring decompilation 2016-10-20 rocky @@ -964,7 +1360,7 @@ 2016-10-19 moagstar * pytest/test_fstring.py, uncompyle6/parsers/parse3.py, - uncompyle6/parsers/parse36.py, uncompyle6/semantics/pysource.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 @@ -1152,13 +1548,13 @@ 2016-10-05 rocky * uncompyle6/parser.py, uncompyle6/parsers/parse2.py, - uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Python 3: "and" doesn't have optional come_from 2016-10-05 rocky * uncompyle6/parser.py, uncompyle6/parsers/parse2.py, - uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Python 3: "and" doesn't have optional come_from 2016-10-05 rocky @@ -1188,7 +1584,7 @@ 2016-09-26 rocky * HISTORY.md, uncompyle6/parser.py, uncompyle6/parsers/parse2.py, - uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Interval order COME_FROMs in Python3 This bug had possibly caused lots of grammar pollution which may need addressing. We want to process COME_FROMs to the same offset to be in *descending* order so we have the larger range or biggest @@ -1273,7 +1669,7 @@ 2016-09-21 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: Python 2 & 3 scanner code ever so slightly closer 2016-09-21 rocky @@ -1283,7 +1679,7 @@ 2016-09-18 rocky * uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner26.py, uncompyle6/semantics/pysource.py: Small changes 2016-09-11 rocky @@ -1294,7 +1690,7 @@ 2016-09-11 rocky * test/bytecode_3.6/fstring.py, - test/bytecode_3.6/fstring_single.py, uncompyle6/parsers/parse35.py: + test/bytecode_3.6/fstring_single.py, uncompyle6/parsers/parse35.py: Tidy a bit 2016-09-09 rocky @@ -1308,7 +1704,7 @@ 2016-09-09 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/semantics/pysource.py: + * uncompyle6/scanners/scanner2.py, uncompyle6/semantics/pysource.py: ret_cond adjustment for < 2.7 and ... "<= 2.6" -> "< 2.7" since python 2.6's version is 2.6000001 2016-09-09 rocky @@ -1330,7 +1726,7 @@ 2016-09-08 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Python 3.0-3.2 *args processing 2016-09-08 rocky @@ -1366,7 +1762,7 @@ * uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse26.py, uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py: + uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py: Python 2.6- try/except control flow detection 2016-09-04 rocky @@ -1441,19 +1837,19 @@ 2016-09-02 rocky * test/simple_source/bug26/06_return_pop.py, - uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: + uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: Python 2.6- bug: RETURN_ENDIF, POP_TOP .. POP_TOP should be excluded as a potentional statement beginning 2016-09-02 rocky * test/simple_source/bug33/02_named_and_kwargs.py, - uncompyle6/scanners/scanner2.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner2.py, uncompyle6/semantics/pysource.py: Fix Python 3.x named param and kwargs bug 2016-09-01 rocky * test/simple_source/bug26/04_while_and_stmt_one_line.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: 2.6- bug: while..and: stmt - on one line If 2.6 or before POP_BLOCK after a JUMP_IF_FALSE does not constitute a new statement. The POP_BLOCK is really part of the JUMP_IF_FALSE. In Python 2.7+ it's a single op. @@ -1461,7 +1857,7 @@ 2016-09-01 rocky * test/simple_source/bug26/02_except_as.py, - uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: Handle Python 2.6 and below "except , " 2016-08-31 rocky @@ -1603,7 +1999,7 @@ * README.rst, uncompyle6/parser.py, uncompyle6/parsers/parse22.py, uncompyle6/scanner.py, uncompyle6/scanners/scanner22.py, uncompyle6/scanners/scanner23.py, uncompyle6/scanners/scanner24.py, - uncompyle6/scanners/scanner25.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner25.py, uncompyle6/semantics/pysource.py: Start handling Python 2.2 bytecode and... Fix some bugs in Python 2.3-2.5 bytecode handling 2016-08-11 Omer Katz @@ -1672,7 +2068,7 @@ 2016-07-29 rocky * uncompyle6/parsers/parse35.py, uncompyle6/scanner.py, - uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: Fix 3.5 misclassifying RETURN_VALUE We use location of SETUP_EXCEPT instructions to disambiguate. 2016-07-28 Daniel Bradburn @@ -1771,7 +2167,7 @@ 2016-07-27 rocky - * uncompyle6/parsers/parse2.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse2.py, uncompyle6/semantics/pysource.py: Small code clean up 2016-07-26 rocky @@ -1799,7 +2195,7 @@ test/simple_source/bug_pypy27/03_try_return.py, uncompyle6/parser.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: More PyPy grammar rules * assert one and two-arg form * trystmt Simplify adding multiple grammar rules 2016-07-25 rocky @@ -1861,7 +2257,7 @@ * README.rst, test/simple_source/stmts/03_if_elif.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse27.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: Handle PyPy JUMP_IF_NOT_DEBUG Update README.rst to note PyPY and reorganize a little 2016-07-25 rocky @@ -1883,7 +2279,7 @@ test/Makefile, test/test_pythonlib.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, uncompyle6/scanner.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: PyPy support * Use proper PYPY 32 opcodes * handle opcodes LOOKUP_METHOD and CALL_METHOD * Administrative stuff for PyPy 2016-07-24 Daniel Bradburn @@ -1903,19 +2299,19 @@ 2016-07-23 rocky * test/simple_source/bug27+/05_for_try_except.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: Another 2.7 'continue' detection bug 2016-07-23 rocky * test/simple_source/bug27+/05_for_try_except.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: Another 2.7 'continue' detection bug 2016-07-23 rocky * test/simple_source/bug27+/05_for_try_except.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner27.py: Another 2.7 'continue' detection bug 2016-07-23 rocky @@ -1964,7 +2360,7 @@ 2016-07-17 rocky - * pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right: + * pytest/testdata/if-2.7.right, pytest/testdata/ifelse-2.7.right: Adjust test data for changed disasm output 2016-07-16 rocky @@ -1998,7 +2394,7 @@ 2016-07-14 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Attempt to get 3.5 RETURN_END_IF working This feels hacky and I'm not sure is quite right. Untili we understand better what to do though, we'll go with it. @@ -2069,7 +2465,7 @@ * test/simple_source/bug33/05_store_name.py, test/simple_source/comprehension/05_3x_set_comphension.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Python 3.2 & 3.3 handle STORE_NAME better 2016-07-11 rocky @@ -2124,13 +2520,13 @@ 2016-07-10 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: Bugs caused by 3.x jump_forward misclasification 2016-07-10 rocky * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py: + uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py: Python 3 better CONTINUE op classification Also document what's up with JUMP_ABSOLUTE classification 2016-07-09 rocky @@ -2221,7 +2617,7 @@ * uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner33.py, - uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: + uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: Python 3 code cleanup 2016-07-08 rocky @@ -2242,7 +2638,7 @@ 2016-07-08 rocky * uncompyle6/parsers/parse24.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner24.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner24.py, uncompyle6/scanners/scanner26.py: Python 2.4 generator expressions and gen_comp_body 2016-07-08 rocky @@ -2268,12 +2664,12 @@ 2016-07-08 rocky * test/simple_source/stmts/11_return_val.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: 2.5/2.6 RETURN_VALUE bug 2016-07-08 rocky - * uncompyle6/parsers/parse25.py, uncompyle6/parsers/parse26.py: + * uncompyle6/parsers/parse25.py, uncompyle6/parsers/parse26.py: 2.5/2.6 fn name clash fixes list conprehension problem 2016-07-08 rocky @@ -2315,7 +2711,7 @@ 2016-07-07 rocky - * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + * uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: <2.6 make sure jump back on loops is really "back" 2016-07-07 rocky @@ -2374,12 +2770,12 @@ * uncompyle6/parser.py, uncompyle6/parsers/parse26.py, uncompyle6/parsers/parse27.py, uncompyle6/parsers/parse3.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner26.py: Another 2.6 while stmt. Clean up grammar a little 2016-07-03 rocky - * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: + * uncompyle6/parsers/parse26.py, uncompyle6/scanners/scanner2.py: 2.6 improper tagging of RETURN_END_IF 2016-07-02 rocky @@ -2416,7 +2812,7 @@ 2016-06-30 rocky * test/simple_source/stmts/06_for_break.py, - uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: More 2.6.9 bugs fixed * break loop parsing bug * ifelsestmt semantic-action bug in handling else 2016-06-30 rocky @@ -2433,7 +2829,7 @@ 2016-06-30 rocky * test/simple_source/comprehension/05_for_for.py, - uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: 2.6.9 list comprehension 2016-06-30 rocky @@ -2475,7 +2871,7 @@ 2016-06-28 rocky - * uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: Weird 2.6.9 list comprehension 2016-06-28 rocky @@ -2492,7 +2888,7 @@ * uncompyle6/parser.py, uncompyle6/parsers/parse26.py, uncompyle6/parsers/parse27.py, uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py: Base 2.5 off of 2.6. Some other small bugs. 2016-06-27 rocky @@ -2502,7 +2898,7 @@ 2016-06-27 rocky - * uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse26.py, uncompyle6/semantics/pysource.py: 2.6 list comprehensions 2016-06-27 rocky @@ -2587,7 +2983,7 @@ 2016-06-22 rocky * test/simple_source/expression/05_yield_from.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: differing ways to do "yield from" in 3.3-3.5 2016-06-22 rocky @@ -2596,7 +2992,7 @@ uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner23.py, uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Add Python 3.5 yield from and ... * fragments.py: Handle pass stmt sometimes * scanners: regularize Python 2 scanners some * test/test_pyenvlib.py: add python 3.5.1 option 2016-06-22 rocky @@ -2606,7 +3002,7 @@ 2016-06-22 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: More 3.2 LOAD_CONST removal More python3 custom grammar DRYing 2016-06-22 rocky @@ -2618,7 +3014,7 @@ * test/simple_source/expression/05_lambda.py, test/simple_source/expression/10_lambda.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Python 3.2 MAKE_FUNCTION adjustment 2016-06-22 rocky @@ -2637,18 +3033,18 @@ 2016-06-20 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Bang on Python 3.2 decompiling. 2016-06-20 rocky * uncompyle6/parsers/parse3.py, uncompyle6/scanner.py, - uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py: + uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner3.py: Python 3 needs Python2's RETURN_END_IF Make python2 and python3 scanner look more the same 2016-06-20 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: + * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py: previous 2.7 class decorator bug fixed in 3.x 2016-06-20 rocky @@ -2680,7 +3076,7 @@ * test/simple_source/def/11_mkfunc_closure.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: 3.x make closure kw args handling bug 2016-06-20 rocky @@ -2717,7 +3113,7 @@ * test/simple_source/comprehension/05_set_comprehension.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner27.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: 2.7 and 3.x bug in dict comprehensions 2016-06-19 rocky @@ -2735,7 +3131,7 @@ * test/simple_source/looping/08_while_except_bug.py, uncompyle6/parser.py, uncompyle6/parsers/parse2.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Python 3 except clause parsing bug 2016-06-19 rocky @@ -2797,18 +3193,18 @@ * pytest/test_deparse.py, test/simple_source/comprehension/05_set_comprehension.py, uncompyle6/parser.py, uncompyle6/parsers/parse3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Fix python 3 set comprehension and ... Add a few set/list comprehension offsets for Python 3 2016-06-06 rocky * uncompyle6/parser.py, uncompyle6/parsers/astnode.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: small changes 2016-06-06 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/fragments.py: + * uncompyle6/parsers/parse3.py, uncompyle6/semantics/fragments.py: include offset for starting listcomp 2016-06-03 rocky @@ -2830,7 +3226,7 @@ uncompyle6/scanners/scanner2.py, uncompyle6/scanners/scanner23.py, uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py, - uncompyle6/scanners/scanner35.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner35.py, uncompyle6/semantics/pysource.py: Limited support for Python 2.3 2016-06-03 rocky @@ -2928,7 +3324,7 @@ 2016-05-29 rocky * uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py: + uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py: Bang again on Python 2.5 and 2.6 scanners 2016-05-29 rocky @@ -2940,7 +3336,7 @@ 2016-05-29 rocky * uncompyle6/scanners/scanner2.py, - uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py: + uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py: Start to DRY 2.6 scanner Note: can't use xdis 2.6 opcode until another xdis release. 2016-05-29 rocky @@ -2957,7 +3353,7 @@ * uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner33.py, - uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: + uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: DRY scanners more 2016-05-28 rocky @@ -2972,7 +3368,7 @@ * test/simple_source/comprehension/06_list_ifnot.py, test/simple_source/comprehension/10-list-ifnot.py, uncompyle6/scanners/dis3.py, uncompyle6/scanners/scanner3.py, - uncompyle6/scanners/scanner35.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner35.py, uncompyle6/semantics/pysource.py: Remove dis3. Fix in 3.x list if not comprehension 2016-05-28 rocky @@ -2983,7 +3379,7 @@ 2016-05-28 rocky * uncompyle6/opcodes/opcode_32.py, uncompyle6/opcodes/opcode_33.py, - uncompyle6/opcodes/opcode_34.py, uncompyle6/scanners/scanner3.py: + uncompyle6/opcodes/opcode_34.py, uncompyle6/scanners/scanner3.py: Remove dup 3.x opcodes 2016-05-28 rocky @@ -2993,7 +3389,7 @@ 2016-05-28 rocky * uncompyle6/scanner.py, uncompyle6/scanners/scanner32.py, - uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py: + uncompyle6/scanners/scanner33.py, uncompyle6/scanners/scanner34.py: xdis for Python 3 opcodes 2016-05-28 rocky @@ -3095,7 +3491,7 @@ 2016-05-18 rocky * pytest/test_marsh.py, - test/simple_source/expression/06_frozenset.py, uncompyle6/marsh.py: + test/simple_source/expression/06_frozenset.py, uncompyle6/marsh.py: Handle marshal frozenset 2016-05-18 rocky @@ -3135,14 +3531,14 @@ 2016-05-17 rocky * pytest/test_marsh.py, - test/simple_source/expression/02_complex.py, uncompyle6/marsh.py: + test/simple_source/expression/02_complex.py, uncompyle6/marsh.py: Fix marshal bug in handling complex numbers 2016-05-17 rocky * Makefile, test/simple_source/def/09_class_closure.py, uncompyle6/parser.py, uncompyle6/parsers/parse3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Fix Python 3.x bugs * class definitions made via closures * Add "make check-short" to top-level * parse3.py: Python 3.3 uses STORE_LOGALS 2016-05-16 rocky @@ -3212,7 +3608,7 @@ * test/simple_source/expression/05_lambda.py, test/test_pyenvlib.py, uncompyle6/parsers/parse3.py, - uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: + uncompyle6/scanners/scanner3.py, uncompyle6/semantics/pysource.py: Fix bug in Python 3 lambda expression handling Some other small cleanup changes 2016-05-15 rocky @@ -3220,7 +3616,7 @@ * uncompyle6/bin/pydisassemble.py, uncompyle6/disas.py, uncompyle6/parser.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner34.py, - uncompyle6/scanners/scanner35.py, uncompyle6/scanners/tok.py: + uncompyle6/scanners/scanner35.py, uncompyle6/scanners/tok.py: pydisassemble disassemble without grammar mangling Some other small cleanups as well 2016-05-15 rocky @@ -3260,7 +3656,7 @@ * uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: DRY scanner34 and scanner35 handle 3.0..3.4 build maps as key/value pairs 2016-05-15 rocky @@ -3332,7 +3728,7 @@ 2016-05-12 rocky * uncompyle6/scanners/scanner26.py, - uncompyle6/scanners/scanner27.py, uncompyle6/scanners/scanner35.py: + uncompyle6/scanners/scanner27.py, uncompyle6/scanners/scanner35.py: More small changes 2016-05-12 rocky @@ -3349,7 +3745,7 @@ * __pkginfo__.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Misc fixups/cleanups * parse3.py Had botched if-for-else test by grammar addition * semantics/*.py: Show errorstack in failed parse when -g (requires sparck 1.2.0) * some optimization in scanner3 @@ -3363,7 +3759,7 @@ uncompyle6/parsers/parse3.py, uncompyle6/scanners/dis35.py, uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Redo make_function for *, arg main(*, file='foo') and things like that now work 2016-05-11 rocky @@ -3395,7 +3791,7 @@ 2016-05-09 rocky * test/simple_source/stmts/09_whiletrue_bug.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Python 3 "while True" bug 2016-05-09 rocky @@ -3489,7 +3885,7 @@ * HISTORY.md, test/simple_source/branching/10_if_pass.py, uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py, - uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner35.py: + uncompyle6/scanners/scanner3.py, uncompyle6/scanners/scanner35.py: Fix 3.5 if..pass bug Update HISTORY.MD to include Dan Pascu. Some minor doc corrections 2016-05-08 rocky @@ -3506,7 +3902,7 @@ * test/simple_source/expression/05_yield_from.py, uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner35.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Handle Python 3 yield from Start dealing with MAKE_FUNCTION flags - not done yet. 2016-05-06 rocky @@ -3571,19 +3967,19 @@ 2016-05-05 rocky * test/simple_source/def/05_abc_class.py, - test/simple_source/def/06_classbug.py, uncompyle6/parsers/parse3.py: + test/simple_source/def/06_classbug.py, uncompyle6/parsers/parse3.py: Python 3.5 abc.py bug distilled 2016-05-05 rocky - * uncompyle6/scanners/dis35.py, uncompyle6/scanners/scanner35.py: + * uncompyle6/scanners/dis35.py, uncompyle6/scanners/scanner35.py: Add cross-Python-protable 3.5 dis module 2016-05-04 rocky * test/simple_source/stmts/05_with.py, uncompyle6/opcodes/opcode_35.py, uncompyle6/parser.py, - uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner35.py: + uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner35.py: Handle 3.5 with [as] scanner35.py: Fix a small variable-name typo 2016-05-03 rocky @@ -3593,7 +3989,7 @@ 2016-05-03 rocky * uncompyle6/scanners/scanner3.py, - uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: + uncompyle6/scanners/scanner34.py, uncompyle6/scanners/scanner35.py: Don't repeat next_except_jump 2016-05-03 rocky @@ -3711,7 +4107,7 @@ * requirements.txt, uncompyle6/parser.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: spark -> spark_parser 2016-04-28 rocky @@ -3859,7 +4255,7 @@ 2016-01-02 rocky * uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py, - uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.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 @@ -3953,7 +4349,7 @@ 2015-12-31 rocky * test/simple_source/def/05_class.py, uncompyle6/parsers/parse3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Handle Python 3.3 > dotted class names 2015-12-30 rocky @@ -3976,7 +4372,7 @@ 2015-12-30 rocky - * uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + * 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 @@ -4023,7 +4419,7 @@ * 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: + uncompyle6/scanners/scanner34.py, uncompyle6/semantics/pysource.py: Towards Python3 getting try/except working more often. 2015-12-29 rocky @@ -4056,7 +4452,7 @@ * 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: + 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 @@ -4075,7 +4471,7 @@ * uncompyle6/disas.py, uncompyle6/load.py, uncompyle6/main.py, uncompyle6/marsh.py, uncompyle6/scanners/scanner3.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.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 @@ -4125,7 +4521,7 @@ 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: + 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. @@ -4141,7 +4537,7 @@ 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: + 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. @@ -4205,7 +4601,7 @@ 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: + 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. @@ -4289,7 +4685,7 @@ * test/simple_source/simple_stmts/00_import.py, test/simple_source/simple_stmts/00_pass.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Start Python3 class(superclass) handling 2015-12-23 rocky @@ -4323,7 +4719,7 @@ uncompyle6/opcodes/opcode_27.py, uncompyle6/opcodes/opcode_34.py, uncompyle6/parsers/astnode.py, uncompyle6/parsers/parse2.py, uncompyle6/parsers/parse3.py, uncompyle6/parsers/spark.py, - uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: + uncompyle6/semantics/fragments.py, uncompyle6/semantics/pysource.py: Allow comments in grammar rules. Start working on Python3 class (not finished). More test organization. @@ -4407,7 +4803,7 @@ test/simple_source/misc/assign.py, test/simple_source/misc/assign_none_str.py, test/simple_source/simple_stmts/00_assign.py, - uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: + uncompyle6/parsers/parse3.py, uncompyle6/semantics/pysource.py: Start Python3 execption handling 2015-12-21 rocky @@ -4553,7 +4949,7 @@ * test/Makefile, test/simple-source/misc/assign_none.py, test/simple-source/misc/assign_none_str.py, uncompyle6/marsh.py, - uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py: + uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py: Python 3 decompilation from Python2 2015-12-20 rocky @@ -4571,7 +4967,7 @@ 2015-12-20 rocky * Makefile, README.rst, test/Makefile, test/dis-compare.py, - uncompyle6/deparser.py, uncompyle6/disas.py, uncompyle6/walker.py: + uncompyle6/deparser.py, uncompyle6/disas.py, uncompyle6/walker.py: Go over makefiles to make "make check" work. walker, deparser: use zip_longest @@ -4641,7 +5037,7 @@ test/simple-source/precedence/left.py, test/simple-source/precedence/right.py, test/simple-source/precedence/structure.py, - uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner34.py: + uncompyle6/parsers/parse3.py, uncompyle6/scanners/scanner34.py: Python 3 bytecode handles opcodes with varargs (better). Decompiling assert works. Add more of the simple tests and their compiled bytecode. @@ -4683,7 +5079,7 @@ 2015-12-18 rocky - * test/simple-source/comprehension/forelse.py, uncompyle6/disas.py: + * test/simple-source/comprehension/forelse.py, uncompyle6/disas.py: disas.py: Do better for finding/turning a .py file into a .pyc file across supported versions of Python. Add for else list comprehension test @@ -4782,7 +5178,7 @@ 2015-12-17 rocky - * uncompyle6/opcodes/opcode_34.py, uncompyle6/parsers/parse3.py: + * uncompyle6/opcodes/opcode_34.py, uncompyle6/parsers/parse3.py: Python 3.4 correct grammar for some looping constructs 2015-12-17 rocky @@ -4817,14 +5213,14 @@ 2015-12-16 rocky * uncompyle6/deparser.py, uncompyle6/disas.py, - uncompyle6/parser.py, uncompyle6/scanner.py, uncompyle6/walker.py: + uncompyle6/parser.py, uncompyle6/scanner.py, uncompyle6/walker.py: Add LICENSE. Add demo programs and DRY code a little 2015-12-16 rocky * uncompyle6/opcodes/opcode_34.py, uncompyle6/scanner.py, uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py, - uncompyle6/scanners/scanner27.py, uncompyle6/scanners/scanner34.py: + uncompyle6/scanners/scanner27.py, uncompyle6/scanners/scanner34.py: On Python3.4 decompiling Python 3.4 instructions, use its built-in disassembler routines. In contrast to what was here, they most likely work! @@ -4881,7 +5277,7 @@ uncompyle6/deparser.py, uncompyle6/disas.py, uncompyle6/magics.py, uncompyle6/marsh.py, uncompyle6/scanners/scanner25.py, uncompyle6/scanners/scanner26.py, uncompyle6/scanners/scanner27.py, - uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py: + uncompyle6/scanners/scanner32.py, uncompyle6/scanners/scanner34.py: Split out marhsal and disassemble code and spell disassemble correctly. Fix some lint issues @@ -4966,7 +5362,7 @@ 2015-12-14 rocky - * uncompyle6/dparser.py, uncompyle6/parser.py, uncompyle6/walker.py: + * uncompyle6/dparser.py, uncompyle6/parser.py, uncompyle6/walker.py: uncompyle6/dparser -> uncompyle6/parser 2015-12-14 rocky @@ -5219,7 +5615,7 @@ * MANIFEST, MANIFEST.in, PKG-INFO, README.rst, uncompyle6/opcodes/opcode_23.py, uncompyle6/opcodes/opcode_26.py, uncompyle6/opcodes/opcode_27.py, uncompyle6/scanner25.py, - uncompyle6/scanner26.py, uncompyle6/spark.py, uncompyle6/verify.py: + uncompyle6/scanner26.py, uncompyle6/spark.py, uncompyle6/verify.py: Correct MANIFEST->MANIFEST.in more lint 2015-12-13 R. Bernstein @@ -5236,7 +5632,7 @@ uncompyle6/__init__.py, uncompyle6/disas.py, uncompyle6/opcodes/opcode_25.py, uncompyle6/opcodes/opcode_26.py, uncompyle6/scanner25.py, uncompyle6/scanner26.py, - uncompyle6/scanner34.py, uncompyle6/spark.py, uncompyle6/verify.py: + uncompyle6/scanner34.py, uncompyle6/spark.py, uncompyle6/verify.py: Make uncompyle6 run on Python3.4 and Python 2.7 We don't need our own disassembler. Python's will do fine @@ -5337,13 +5733,13 @@ * tox.ini, uncompyle-code.py, uncompyle6/dparser.py, uncompyle6/scanner25.py, uncompyle6/scanner27.py, - uncompyle6/scanner34.py, uncompyle6/spark.py, uncompyle6/walker.py: + uncompyle6/scanner34.py, uncompyle6/spark.py, uncompyle6/walker.py: Minimal disassemble, ast compile and deparse work on Python 3. Some linting 2015-12-12 rocky - * uncompyle6/dparser.py, uncompyle6/parser.py, uncompyle6/walker.py: + * uncompyle6/dparser.py, uncompyle6/parser.py, uncompyle6/walker.py: parser -> dparser so as not to conflict with python3's parser. 2015-12-12 rocky @@ -5362,7 +5758,7 @@ 2015-12-11 rocky - * uncompyle-code.py, uncompyle6/__init__.py, uncompyle6/walker.py: + * uncompyle-code.py, uncompyle6/__init__.py, uncompyle6/walker.py: python3 compatibiity and remove some flake8 warnings. 2015-12-11 rocky @@ -5440,7 +5836,7 @@ 2013-07-16 root * uncompyle2/__init__.py, uncompyle2/disas.py, - uncompyle2/magics.py, uncompyle2/scanner27.py, uncompyle2/walker.py: + uncompyle2/magics.py, uncompyle2/scanner27.py, uncompyle2/walker.py: marshal disassembly improvement 2013-06-20 Mysterie @@ -5525,7 +5921,7 @@ uncompyle2/opcode/opcode_27.py, uncompyle2/parser.py, uncompyle2/scanner.py, uncompyle2/scanner25.py, uncompyle2/scanner26.py, uncompyle2/scanner27.py, - uncompyle2/spark.py, uncompyle2/verify.py, uncompyle2/walker.py: + uncompyle2/spark.py, uncompyle2/verify.py, uncompyle2/walker.py: Cleaning code & patch 2012-09-22 Mysterie @@ -5630,4 +6026,3 @@ 2012-06-05 Mysterie * first commit - diff --git a/NEWS b/NEWS index cc30c15d..9c7ade5f 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,9 @@ +uncompyle6 2.9.11 2016-04-06 + +- Better support for Python 3.5+ BUILD_MAP_UNPACK +- Start 3.6 CALL_FUNCTION_EX support +- Many decompilation bug fixes. (Many more remain). See ChangeLog + uncompyle6 2.9.10 2016-02-25 - Python grammar rule fixes diff --git a/test/bytecode_2.6/06_list_ifnot_and.pyc b/test/bytecode_2.6/06_list_ifnot_and.pyc-notyet similarity index 100% rename from test/bytecode_2.6/06_list_ifnot_and.pyc rename to test/bytecode_2.6/06_list_ifnot_and.pyc-notyet diff --git a/uncompyle6/version.py b/uncompyle6/version.py index 5d5facdb..566e6123 100644 --- a/uncompyle6/version.py +++ b/uncompyle6/version.py @@ -1,3 +1,3 @@ # This file is suitable for sourcing inside bash as # well as importing into Python -VERSION='2.9.10' +VERSION='2.9.11'