Commit Graph

63 Commits

Author SHA1 Message Date
rocky
7b38d2f1f8 Adjust for xdis opcode JUMP_OPS. release 2.12.0 2017-09-25 20:01:31 -04:00
rocky
27ab6fe2f5 Use xdis 3.5.0's opcode sets 2017-07-08 20:41:46 -04:00
rocky
c7f8edd5ef Simplify access to L65536 ...
and fix use in scanner26.py. Thanks to AnythingTechPro
2017-06-09 18:22:02 -04:00
rocky
49fd430505 EXTENDED_ARG is implemented in 2.6 2017-05-19 19:29:56 -04:00
rocky
597d51951e Improve Python 2.6 & 2.7 verification 2017-01-23 02:32:09 -05:00
rocky
6c546fe6e1 WIP : Add THEN to disambigute from "and" 2016-12-27 22:45:08 -05:00
rocky
1e324e0e8d Misc changes
scanner26.py: make scanner2.py and scanner26.py more alike
scanner2.py: check that return stmt is last in list. (May change)
main.py: show filename on verify error
test/*: add more
2016-11-26 21:41:45 -05:00
rocky
195bbc746b Pass debug in scanner26 find_targets 2016-11-20 03:42:30 -05:00
rocky
f2a3721d7d Start to improve detect_structure for 2.7 and 2.x
Add debug flag to find_jump_targets to show the structure we found.
When there are control-flow bugs, it's often reflected here.

scanner3.py: make code make more similar to 2.x code
2016-11-20 02:38:59 -05:00
rocky
6073c77921 Show line numbers in 2.6 "after" asm ..
start to understand some of the Python 2.6 bytecode parse failures.
2016-11-14 00:30:23 -05:00
rocky
0826129112 DRY Python 2.x unmangle_classname
main.py: small typo: Disassembled -> Decompiled
2016-10-20 06:35:01 -04:00
rocky
5703ccd8b8 2.6 try statement (and below)
They may neeed arbitrary come_froms for each except clause
2016-10-13 19:37:38 -04:00
rocky
9ef670c872 Fix Python 1.5 bytecode deparse
Need xdis 3.0.2 though since the bug is really there.
2016-10-11 02:39:09 -04:00
rocky
8b240a80e7 Get ready for release 2.9.0 ...
- Use xdis 3.0.0 protocol load_module. Needs bump in requirements.txt
  and _pkg_info_.py
- Start Python 1.5 decompiling - another round of work is needed to remove
  bugs
- small cleanups
2016-10-10 09:33:49 -04:00
rocky
4f83a87a00 Python 2 & 3 scanner code ever so slightly closer 2016-09-21 07:06:30 -04:00
rocky
c119965d96 Small changes 2016-09-18 17:23:49 -04:00
rocky
318311818e Python 2.6- try/except control flow detection 2016-09-05 04:02:37 -04:00
rocky
c7788e4545 disassemble -> ingest where appropriate
As part of tokenization for (de)parsing, we need to do something like a
disassembly, but is is really a little different.

Disassembly, strictly speaking, is done by the xdis module now.
What "ingestion" does is massage the instruction tokens to a form that is
more amenable for parsing.

In sum, ingestion is different than disassembly, although disassembly is
generally the first part of ingestion.
2016-09-04 11:43:02 -04:00
rocky
f5eeed6759 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.
2016-09-01 20:44:17 -04:00
rocky
98a6f47ad6 Python 2.2 scanner bug: don't mung IMPORT_NAME op 2016-08-16 06:38:09 -04:00
rocky
285444e19a Better assembly formatting of jump instructions 2016-07-25 00:36:39 -04:00
rocky
21377f3b43 Merge branch 'master' into pypy
Conflicts:
	uncompyle6/scanners/scanner2.py
2016-07-23 10:57:58 -04:00
rocky
942b15e3c6 Suppress arg in dissassembly if there is none 2016-07-16 14:12:31 -04:00
rocky
0ee52aeeef Isolate pseudo op IMPORT_NAME_CONT
I think this is a holdover from pre 2.3 days. Possibly it can be dropped altogether.
2016-07-14 21:05:09 -04:00
rocky
7b7a9fa4cf Python 3.4 assertion handling. Improve verify
3.4 has jump optimization like 3.5.
verify.py: show mismatch on verification mismatch
2016-07-14 05:20:30 -04:00
rocky
59ba8a65cd Structure detection bugs +
Had borked 3.4 grammar rules in
previous refactor
2016-07-10 19:21:55 -04:00
rocky
44dba42a40 Remove JA. Use standard JUMP_ABSOLUTE instead 2016-07-10 08:21:17 -04:00
rocky
52b71bb01a Python 3 better CONTINUE op classification
Also document what's up with JUMP_ABSOLUTE
classification
2016-07-10 06:47:34 -04:00
rocky
65b9ecee31 Fix some 2.3 bugs; add more 2.3-6. tests 2016-07-09 17:33:54 -04:00
rocky
d6b35d57e4 DRY scanner code. Allow 2.4 decompile from 3.x 2016-07-08 21:37:09 -04:00
rocky
e31f829a56 Python 2.4 generator expressions and gen_comp_body 2016-07-08 18:00:13 -04:00
rocky
e020f8f9a9 2.5/2.6 RETURN_VALUE bug 2016-07-08 12:02:28 -04:00
rocky
0b6108801d <2.6 make sure jump back on loops is really "back" 2016-07-07 11:43:26 -04:00
rocky
974b11ff55 Another 2.6 while stmt. Clean up grammar a little 2016-07-03 10:50:19 -04:00
rocky
32ca0c4482 2.6 ifelse/while modifications 2016-06-29 12:46:02 -04:00
rocky
ae980e4f64 Base 2.5 off of 2.6. Some other small bugs. 2016-06-28 03:31:32 -04:00
rocky
fa7d8f955a WIP Python-2.6 but don't remove opcodes
The scheme for turning 2.6 bytecode into 2.7 psuedo bytecode
I think is a lose.

I won't work for fragment handling.

Instead, change the grammar and syntax rules

This also has the benefits:

* We see how code generation changed over releases
  by looking at grammar and semantic rules rather
  than arbitrary code
* We can better assocate with what's running
  (in a sense this is a restatement of broken fragment
   handling)
* With the right structure in place we are in a better position to
  handle 2.5, 2.4, etc. That is, after a while, the incremental changes
  to get say from python 2.3 bytecode to python 2.7 are great.

Conflicts:
	uncompyle6/parsers/astnode.py
2016-06-24 18:15:59 -04:00
rocky
982a6010a1 WIP 2.6 redo bytecode handling
Don't try to convert 2.6 bytecode to 2.7 psuedo bytecode.
Instead adjust grammar and semantic actions.

Down the line we should to segregate version changes in
semantic code better.
2016-06-24 09:23:30 -04:00
rocky
480e6a125f 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 13:08:11 -04:00
rocky
ebcb1d08f4 Limited support for Python 2.3 2016-06-03 10:20:52 -04:00
rocky
eefbc40eef option to show asm and DRY.
Get ready for some 2.3 support
2016-06-03 09:25:20 -04:00
rocky
3da4c9ce77 Start custom grammar for 2.6 and ...
fix a python 2.6.9 deparse with lc if+and+not
2016-06-02 19:16:27 -04:00
rocky
167f5af5e6 Misc refactorings 2016-06-02 16:58:42 -04:00
rocky
69bb74c86e DRY scanner25 and scanner26 more 2016-05-29 22:18:36 -04:00
rocky
ead41d7a96 Bang again on Python 2.5 and 2.6 scanners 2016-05-29 19:13:57 -04:00
rocky
bb2e9c0d31 bang on scanner2{5,6} 2016-05-29 18:44:07 -04:00
rocky
58fd0f7fe5 Start to DRY 2.6 scanner
Note: can't use xdis 2.6 opcode until another xdis release.
2016-05-29 05:05:48 -04:00
rocky
e70e7bfc16 Start to DRY Python 2 scanners...
Get 2.7 opcodes from xdis.
2016-05-28 19:34:12 -04:00
rocky
a08ece371e pydisassemble improvements; DRY scannners
disas.py:
 - disassembles *all* code objects found

scanner*.py:
 - no longer need to pass in version numbers; this
   is obtained from the class name
 - no longer pass in opcodes; this is done at
   initialization from the scanner name
 - all Pythoin 3 scanners support native disassembly
2016-05-18 10:58:48 -04:00
rocky
37406557bc More small changes 2016-05-12 12:59:31 -04:00