You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 00:45:53 +08:00
Move scanners in its own directory. Dir base-tests -> base_tests so we
can import from that.
This commit is contained in:
6
Makefile
6
Makefile
@@ -11,7 +11,7 @@ RM ?= rm
|
|||||||
LINT = flake8
|
LINT = flake8
|
||||||
|
|
||||||
#EXTRA_DIST=ipython/ipy_trepan.py trepan
|
#EXTRA_DIST=ipython/ipy_trepan.py trepan
|
||||||
PHONY=check clean dist distclean test test-unit test-functional rmChangeLog clean_pyc nosetests
|
PHONY=check clean dist distclean lint flake8 test test-unit test-functional rmChangeLog clean_pyc nosetests
|
||||||
|
|
||||||
#: Default target - same as "check"
|
#: Default target - same as "check"
|
||||||
all: check
|
all: check
|
||||||
@@ -46,7 +46,9 @@ sdist:
|
|||||||
|
|
||||||
|
|
||||||
#: Style check. Set env var LINT to pyflakes, flake, or flake8
|
#: Style check. Set env var LINT to pyflakes, flake, or flake8
|
||||||
lint:
|
lint: flake8
|
||||||
|
|
||||||
|
flake8:
|
||||||
$(LINT) uncompyle6
|
$(LINT) uncompyle6
|
||||||
|
|
||||||
#: Create binary egg distribution
|
#: Create binary egg distribution
|
||||||
|
@@ -28,11 +28,14 @@ check-short:
|
|||||||
check-2.7-ok:
|
check-2.7-ok:
|
||||||
$(PYTHON) test_pythonlib.py --ok-2.7 --verify $(COMPILE)
|
$(PYTHON) test_pythonlib.py --ok-2.7 --verify $(COMPILE)
|
||||||
|
|
||||||
clean: clean-py-dis clean-dis
|
clean: clean-py-dis clean-dis clean-unverified
|
||||||
|
|
||||||
clean-dis:
|
clean-dis:
|
||||||
find . -name '*_dis' -exec rm -v '{}' ';'
|
find . -name '*_dis' -exec rm -v '{}' ';'
|
||||||
|
|
||||||
|
clean-unverified:
|
||||||
|
find . -name '*_unverified' -exec rm -v '{}' ';'
|
||||||
|
|
||||||
#: Clean temporary compile/decompile/verify direcotries in /tmp
|
#: Clean temporary compile/decompile/verify direcotries in /tmp
|
||||||
clean-py-dis:
|
clean-py-dis:
|
||||||
rm -fr /tmp/py-dis-* || true
|
rm -fr /tmp/py-dis-* || true
|
||||||
|
@@ -1,28 +0,0 @@
|
|||||||
# Embedded file name: /src/external-vcs/github/rocky/uncompyle6/test/base-tests/python2/test_applyEquiv.py
|
|
||||||
|
|
||||||
|
|
||||||
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,57 +0,0 @@
|
|||||||
# Embedded file name: /src/external-vcs/github/rocky/uncompyle6/test/base-tests/python2/test_augmentedAssign.py
|
|
||||||
raise "This program can't be run"
|
|
||||||
a = 1
|
|
||||||
b = 2
|
|
||||||
a += b
|
|
||||||
print a
|
|
||||||
a -= b
|
|
||||||
print a
|
|
||||||
a *= b
|
|
||||||
print a
|
|
||||||
a -= a
|
|
||||||
print a
|
|
||||||
a += 21
|
|
||||||
print a
|
|
||||||
l = [1, 2, 3]
|
|
||||||
l[1] *= 3
|
|
||||||
print l[1]
|
|
||||||
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,39 +0,0 @@
|
|||||||
# Embedded file name: /src/external-vcs/github/rocky/uncompyle6/test/base-tests/python2/test_class.py
|
|
||||||
|
|
||||||
|
|
||||||
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,6 +0,0 @@
|
|||||||
# Embedded file name: /src/external-vcs/github/rocky/uncompyle6/test/base-tests/python2/test_divide_future.py
|
|
||||||
from __future__ import division
|
|
||||||
print ' 1 // 2 =', 0
|
|
||||||
print '1.0 // 2.0 =', 0.0
|
|
||||||
print ' 1 / 2 =', 0.5
|
|
||||||
print '1.0 / 2.0 =', 0.5
|
|
@@ -1,118 +0,0 @@
|
|||||||
# Embedded file name: /src/external-vcs/github/rocky/uncompyle6/test/base-tests/python2/test_exceptions.py
|
|
||||||
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)
|
|
0
test/base_tests/python3.4/__init__.py
Normal file
0
test/base_tests/python3.4/__init__.py
Normal file
@@ -70,7 +70,7 @@ test_options = {
|
|||||||
'ok-2.7': [os.path.join(src_dir, 'ok_2.7'),
|
'ok-2.7': [os.path.join(src_dir, 'ok_2.7'),
|
||||||
PYC, 'ok-2.7', 2.7],
|
PYC, 'ok-2.7', 2.7],
|
||||||
|
|
||||||
'base-2.7': [os.path.join(src_dir, 'base-tests', 'python2.7'),
|
'base-2.7': [os.path.join(src_dir, 'base_tests', 'python2.7'),
|
||||||
PYC, 'base_2.7', 2.7],
|
PYC, 'base_2.7', 2.7],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -49,7 +49,7 @@ def _load_file(filename):
|
|||||||
This function does NOT write any file!
|
This function does NOT write any file!
|
||||||
'''
|
'''
|
||||||
fp = open(filename, 'rb')
|
fp = open(filename, 'rb')
|
||||||
source = fp.read()+'\n'
|
source = fp.read().decode('utf-8') + '\n'
|
||||||
try:
|
try:
|
||||||
co = compile(source, filename, 'exec', dont_inherit=True)
|
co = compile(source, filename, 'exec', dont_inherit=True)
|
||||||
except SyntaxError:
|
except SyntaxError:
|
||||||
@@ -104,13 +104,13 @@ def uncompyle(version, co, out=None, showasm=0, showast=0):
|
|||||||
|
|
||||||
# Pick up appropriate scanner
|
# Pick up appropriate scanner
|
||||||
if version == 2.7:
|
if version == 2.7:
|
||||||
import uncompyle6.scanner27 as scan
|
import uncompyle6.scanners.scanner27 as scan
|
||||||
scanner = scan.Scanner27()
|
scanner = scan.Scanner27()
|
||||||
elif version == 2.6:
|
elif version == 2.6:
|
||||||
import uncompyle6.scanner26 as scan
|
import uncompyle6.scanners.scanner26 as scan
|
||||||
scanner = scan.Scanner26()
|
scanner = scan.Scanner26()
|
||||||
elif version == 2.5:
|
elif version == 2.5:
|
||||||
import uncompyle6.scanner25 as scan
|
import uncompyle6.scanners.scanner25 as scan
|
||||||
scanner = scan.Scanner25()
|
scanner = scan.Scanner25()
|
||||||
scanner.setShowAsm(showasm, out)
|
scanner.setShowAsm(showasm, out)
|
||||||
tokens, customize = scanner.disassemble(co)
|
tokens, customize = scanner.disassemble(co)
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
opcode module - potentially shared between dis and other modules which
|
opcode module - potentially shared between dis and other modules which
|
||||||
operate on bytecodes (e.g. peephole optimizers).
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
@@ -41,6 +40,7 @@ def jabs_op(name, op):
|
|||||||
hasjabs.append(op)
|
hasjabs.append(op)
|
||||||
|
|
||||||
# Instruction opcodes for compiled code
|
# Instruction opcodes for compiled code
|
||||||
|
# Blank lines correspond to available opcodes
|
||||||
|
|
||||||
def_op('STOP_CODE', 0)
|
def_op('STOP_CODE', 0)
|
||||||
def_op('POP_TOP', 1)
|
def_op('POP_TOP', 1)
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
"""
|
"""
|
||||||
opcode module - potentially shared between dis and other modules which
|
opcode module - potentially shared between dis and other modules which
|
||||||
operate on bytecodes (e.g. peephole optimizers).
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
@@ -41,6 +40,7 @@ def jabs_op(name, op):
|
|||||||
hasjabs.append(op)
|
hasjabs.append(op)
|
||||||
|
|
||||||
# Instruction opcodes for compiled code
|
# Instruction opcodes for compiled code
|
||||||
|
# Blank lines correspond to available opcodes
|
||||||
|
|
||||||
def_op('STOP_CODE', 0)
|
def_op('STOP_CODE', 0)
|
||||||
def_op('POP_TOP', 1)
|
def_op('POP_TOP', 1)
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
'''
|
"""
|
||||||
opcode module - potentially shared between dis and other modules which
|
opcode module - potentially shared between dis and other modules which
|
||||||
operate on bytecodes (e.g. peephole optimizers).
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
'''
|
"""
|
||||||
|
|
||||||
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
||||||
'is not', 'exception match', 'BAD')
|
'is not', 'exception match', 'BAD')
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
'''
|
"""
|
||||||
opcode module - potentially shared between dis and other modules which
|
opcode module - potentially shared between dis and other modules which
|
||||||
operate on bytecodes (e.g. peephole optimizers).
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
'''
|
"""
|
||||||
|
|
||||||
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
||||||
'is not', 'exception match', 'BAD')
|
'is not', 'exception match', 'BAD')
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
'''
|
"""
|
||||||
opcode module - potentially shared between dis and other modules which
|
opcode module - potentially shared between dis and other modules which
|
||||||
operate on bytecodes (e.g. peephole optimizers).
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
'''
|
"""
|
||||||
|
|
||||||
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
||||||
'is not', 'exception match', 'BAD')
|
'is not', 'exception match', 'BAD')
|
||||||
|
180
uncompyle6/opcodes/opcode_34.py
Normal file
180
uncompyle6/opcodes/opcode_34.py
Normal file
@@ -0,0 +1,180 @@
|
|||||||
|
|
||||||
|
"""
|
||||||
|
opcode module - potentially shared between dis and other modules which
|
||||||
|
operate on bytecodes (e.g. peephole optimizers).
|
||||||
|
"""
|
||||||
|
|
||||||
|
__all__ = ["cmp_op", "hasconst", "hasname", "hasjrel", "hasjabs",
|
||||||
|
"haslocal", "hascompare", "hasfree", "opname", "opmap",
|
||||||
|
"HAVE_ARGUMENT", "EXTENDED_ARG"]
|
||||||
|
|
||||||
|
cmp_op = ('<', '<=', '==', '!=', '>', '>=', 'in', 'not in', 'is',
|
||||||
|
'is not', 'exception match', 'BAD')
|
||||||
|
|
||||||
|
hasconst = []
|
||||||
|
hasname = []
|
||||||
|
hasjrel = []
|
||||||
|
hasjabs = []
|
||||||
|
haslocal = []
|
||||||
|
hascompare = []
|
||||||
|
hasfree = []
|
||||||
|
|
||||||
|
opmap = {}
|
||||||
|
opname = [''] * 256
|
||||||
|
for op in range(256): opname[op] = '<%r>' % (op,)
|
||||||
|
del op
|
||||||
|
|
||||||
|
def def_op(name, op):
|
||||||
|
opname[op] = name
|
||||||
|
opmap[name] = op
|
||||||
|
|
||||||
|
def name_op(name, op):
|
||||||
|
def_op(name, op)
|
||||||
|
hasname.append(op)
|
||||||
|
|
||||||
|
def jrel_op(name, op):
|
||||||
|
def_op(name, op)
|
||||||
|
hasjrel.append(op)
|
||||||
|
|
||||||
|
def jabs_op(name, op):
|
||||||
|
def_op(name, op)
|
||||||
|
hasjabs.append(op)
|
||||||
|
|
||||||
|
# Instruction opcodes for compiled code
|
||||||
|
# Blank lines correspond to available opcodes
|
||||||
|
|
||||||
|
def_op('STOP_CODE', 0)
|
||||||
|
def_op('POP_TOP', 1)
|
||||||
|
def_op('ROT_TWO', 2)
|
||||||
|
def_op('ROT_THREE', 3)
|
||||||
|
def_op('DUP_TOP', 4)
|
||||||
|
def_op('DUP_TOP_TWO', 5)
|
||||||
|
|
||||||
|
def_op('NOP', 9)
|
||||||
|
def_op('UNARY_POSITIVE', 10)
|
||||||
|
def_op('UNARY_NEGATIVE', 11)
|
||||||
|
def_op('UNARY_NOT', 12)
|
||||||
|
|
||||||
|
def_op('UNARY_INVERT', 15)
|
||||||
|
|
||||||
|
def_op('BINARY_POWER', 19)
|
||||||
|
def_op('BINARY_MULTIPLY', 20)
|
||||||
|
|
||||||
|
def_op('BINARY_MODULO', 22)
|
||||||
|
def_op('BINARY_ADD', 23)
|
||||||
|
def_op('BINARY_SUBTRACT', 24)
|
||||||
|
def_op('BINARY_SUBSCR', 25)
|
||||||
|
def_op('BINARY_FLOOR_DIVIDE', 26)
|
||||||
|
def_op('BINARY_TRUE_DIVIDE', 27)
|
||||||
|
def_op('INPLACE_FLOOR_DIVIDE', 28)
|
||||||
|
def_op('INPLACE_TRUE_DIVIDE', 29)
|
||||||
|
|
||||||
|
def_op('STORE_MAP', 54)
|
||||||
|
def_op('INPLACE_ADD', 55)
|
||||||
|
def_op('INPLACE_SUBTRACT', 56)
|
||||||
|
def_op('INPLACE_MULTIPLY', 57)
|
||||||
|
|
||||||
|
def_op('INPLACE_MODULO', 59)
|
||||||
|
def_op('STORE_SUBSCR', 60)
|
||||||
|
def_op('DELETE_SUBSCR', 61)
|
||||||
|
def_op('BINARY_LSHIFT', 62)
|
||||||
|
def_op('BINARY_RSHIFT', 63)
|
||||||
|
def_op('BINARY_AND', 64)
|
||||||
|
def_op('BINARY_XOR', 65)
|
||||||
|
def_op('BINARY_OR', 66)
|
||||||
|
def_op('INPLACE_POWER', 67)
|
||||||
|
def_op('GET_ITER', 68)
|
||||||
|
def_op('STORE_LOCALS', 69)
|
||||||
|
|
||||||
|
def_op('PRINT_EXPR', 70)
|
||||||
|
def_op('LOAD_BUILD_CLASS', 71)
|
||||||
|
|
||||||
|
def_op('INPLACE_LSHIFT', 75)
|
||||||
|
def_op('INPLACE_RSHIFT', 76)
|
||||||
|
def_op('INPLACE_AND', 77)
|
||||||
|
def_op('INPLACE_XOR', 78)
|
||||||
|
def_op('INPLACE_OR', 79)
|
||||||
|
def_op('BREAK_LOOP', 80)
|
||||||
|
def_op('WITH_CLEANUP', 81)
|
||||||
|
|
||||||
|
def_op('RETURN_VALUE', 83)
|
||||||
|
def_op('IMPORT_STAR', 84)
|
||||||
|
|
||||||
|
def_op('YIELD_VALUE', 86)
|
||||||
|
def_op('POP_BLOCK', 87)
|
||||||
|
def_op('END_FINALLY', 88)
|
||||||
|
def_op('POP_EXCEPT', 89)
|
||||||
|
|
||||||
|
HAVE_ARGUMENT = 90 # Opcodes from here have an argument:
|
||||||
|
|
||||||
|
name_op('STORE_NAME', 90) # Index in name list
|
||||||
|
name_op('DELETE_NAME', 91) # ""
|
||||||
|
def_op('UNPACK_SEQUENCE', 92) # Number of tuple items
|
||||||
|
jrel_op('FOR_ITER', 93)
|
||||||
|
def_op('UNPACK_EX', 94)
|
||||||
|
name_op('STORE_ATTR', 95) # Index in name list
|
||||||
|
name_op('DELETE_ATTR', 96) # ""
|
||||||
|
name_op('STORE_GLOBAL', 97) # ""
|
||||||
|
name_op('DELETE_GLOBAL', 98) # ""
|
||||||
|
def_op('LOAD_CONST', 100) # Index in const list
|
||||||
|
hasconst.append(100)
|
||||||
|
name_op('LOAD_NAME', 101) # Index in name list
|
||||||
|
def_op('BUILD_TUPLE', 102) # Number of tuple items
|
||||||
|
def_op('BUILD_LIST', 103) # Number of list items
|
||||||
|
def_op('BUILD_SET', 104) # Number of set items
|
||||||
|
def_op('BUILD_MAP', 105) # Number of dict entries (upto 255)
|
||||||
|
name_op('LOAD_ATTR', 106) # Index in name list
|
||||||
|
def_op('COMPARE_OP', 107) # Comparison operator
|
||||||
|
hascompare.append(107)
|
||||||
|
name_op('IMPORT_NAME', 108) # Index in name list
|
||||||
|
name_op('IMPORT_FROM', 109) # Index in name list
|
||||||
|
|
||||||
|
jrel_op('JUMP_FORWARD', 110) # Number of bytes to skip
|
||||||
|
jabs_op('JUMP_IF_FALSE_OR_POP', 111) # Target byte offset from beginning of code
|
||||||
|
jabs_op('JUMP_IF_TRUE_OR_POP', 112) # ""
|
||||||
|
jabs_op('JUMP_ABSOLUTE', 113) # ""
|
||||||
|
jabs_op('POP_JUMP_IF_FALSE', 114) # ""
|
||||||
|
jabs_op('POP_JUMP_IF_TRUE', 115) # ""
|
||||||
|
|
||||||
|
name_op('LOAD_GLOBAL', 116) # Index in name list
|
||||||
|
|
||||||
|
jabs_op('CONTINUE_LOOP', 119) # Target address
|
||||||
|
jrel_op('SETUP_LOOP', 120) # Distance to target address
|
||||||
|
jrel_op('SETUP_EXCEPT', 121) # ""
|
||||||
|
jrel_op('SETUP_FINALLY', 122) # ""
|
||||||
|
|
||||||
|
def_op('LOAD_FAST', 124) # Local variable number
|
||||||
|
haslocal.append(124)
|
||||||
|
def_op('STORE_FAST', 125) # Local variable number
|
||||||
|
haslocal.append(125)
|
||||||
|
def_op('DELETE_FAST', 126) # Local variable number
|
||||||
|
haslocal.append(126)
|
||||||
|
|
||||||
|
def_op('RAISE_VARARGS', 130) # Number of raise arguments (1, 2, or 3)
|
||||||
|
def_op('CALL_FUNCTION', 131) # #args + (#kwargs << 8)
|
||||||
|
def_op('MAKE_FUNCTION', 132) # Number of args with default values
|
||||||
|
def_op('BUILD_SLICE', 133) # Number of items
|
||||||
|
def_op('MAKE_CLOSURE', 134)
|
||||||
|
def_op('LOAD_CLOSURE', 135)
|
||||||
|
hasfree.append(135)
|
||||||
|
def_op('LOAD_DEREF', 136)
|
||||||
|
hasfree.append(136)
|
||||||
|
def_op('STORE_DEREF', 137)
|
||||||
|
hasfree.append(137)
|
||||||
|
def_op('DELETE_DEREF', 138)
|
||||||
|
hasfree.append(138)
|
||||||
|
|
||||||
|
def_op('CALL_FUNCTION_VAR', 140) # #args + (#kwargs << 8)
|
||||||
|
def_op('CALL_FUNCTION_KW', 141) # #args + (#kwargs << 8)
|
||||||
|
def_op('CALL_FUNCTION_VAR_KW', 142) # #args + (#kwargs << 8)
|
||||||
|
|
||||||
|
jrel_op('SETUP_WITH', 143)
|
||||||
|
|
||||||
|
def_op('LIST_APPEND', 145)
|
||||||
|
def_op('SET_ADD', 146)
|
||||||
|
def_op('MAP_ADD', 147)
|
||||||
|
|
||||||
|
def_op('EXTENDED_ARG', 144)
|
||||||
|
EXTENDED_ARG = 144
|
||||||
|
|
||||||
|
del def_op, name_op, jrel_op, jabs_op
|
@@ -21,7 +21,7 @@ if (sys.version_info > (3, 0)):
|
|||||||
else:
|
else:
|
||||||
L65536 = long(65536)
|
L65536 = long(65536)
|
||||||
|
|
||||||
from uncompyle6.opcodes import opcode_25, opcode_26, opcode_27
|
from uncompyle6.opcodes import opcode_25, opcode_26, opcode_27, opcode_34
|
||||||
|
|
||||||
|
|
||||||
class Token:
|
class Token:
|
||||||
@@ -84,6 +84,8 @@ class Scanner(object):
|
|||||||
self.opc = opcode_26
|
self.opc = opcode_26
|
||||||
elif version == 2.5:
|
elif version == 2.5:
|
||||||
self.opc = opcode_25
|
self.opc = opcode_25
|
||||||
|
elif version == 3.4:
|
||||||
|
self.opc = opcode_34
|
||||||
|
|
||||||
return self.resetTokenClass()
|
return self.resetTokenClass()
|
||||||
|
|
||||||
|
0
uncompyle6/scanners/__init__.py
Normal file
0
uncompyle6/scanners/__init__.py
Normal file
4
uncompyle6/scanner25.py → uncompyle6/scanners/scanner25.py
Executable file → Normal file
4
uncompyle6/scanner25.py → uncompyle6/scanners/scanner25.py
Executable file → Normal file
@@ -78,7 +78,7 @@ class Scanner25(scan.Scanner):
|
|||||||
while j < start_byte:
|
while j < start_byte:
|
||||||
self.lines.append(linetuple(prev_line_no, start_byte))
|
self.lines.append(linetuple(prev_line_no, start_byte))
|
||||||
j += 1
|
j += 1
|
||||||
(prev_start_byte, prev_line_no) = (start_byte, line_no)
|
prev_line_no = start_byte
|
||||||
while j < codelen:
|
while j < codelen:
|
||||||
self.lines.append(linetuple(prev_line_no, codelen))
|
self.lines.append(linetuple(prev_line_no, codelen))
|
||||||
j+=1
|
j+=1
|
||||||
@@ -149,7 +149,7 @@ class Scanner25(scan.Scanner):
|
|||||||
# verify uses 'pattr' for comparism, since 'attr'
|
# verify uses 'pattr' for comparism, since 'attr'
|
||||||
# now holds Code(const) and thus can not be used
|
# now holds Code(const) and thus can not be used
|
||||||
# for comparism (todo: think about changing this)
|
# for comparism (todo: think about changing this)
|
||||||
# pattr = 'code_object @ 0x%x %s->%s' %\
|
# pattr = 'code_object @ 0x%x %s->%s' %
|
||||||
# (id(const), const.co_filename, const.co_name)
|
# (id(const), const.co_filename, const.co_name)
|
||||||
pattr = '<code_object ' + const.co_name + '>'
|
pattr = '<code_object ' + const.co_name + '>'
|
||||||
else:
|
else:
|
4
uncompyle6/scanner26.py → uncompyle6/scanners/scanner26.py
Executable file → Normal file
4
uncompyle6/scanner26.py → uncompyle6/scanners/scanner26.py
Executable file → Normal file
@@ -10,7 +10,6 @@ import types
|
|||||||
from collections import namedtuple
|
from collections import namedtuple
|
||||||
from array import array
|
from array import array
|
||||||
from operator import itemgetter
|
from operator import itemgetter
|
||||||
from struct import *
|
|
||||||
|
|
||||||
from uncompyle6.opcodes.opcode_26 import *
|
from uncompyle6.opcodes.opcode_26 import *
|
||||||
import dis
|
import dis
|
||||||
@@ -78,8 +77,7 @@ class Scanner26(scan.Scanner):
|
|||||||
while j < start_byte:
|
while j < start_byte:
|
||||||
self.lines.append(linetuple(prev_line_no, start_byte))
|
self.lines.append(linetuple(prev_line_no, start_byte))
|
||||||
j += 1
|
j += 1
|
||||||
last_op = self.code[self.prev[start_byte]]
|
prev_line_no = line_no
|
||||||
(prev_start_byte, prev_line_no) = (start_byte, line_no)
|
|
||||||
while j < codelen:
|
while j < codelen:
|
||||||
self.lines.append(linetuple(prev_line_no, codelen))
|
self.lines.append(linetuple(prev_line_no, codelen))
|
||||||
j+=1
|
j+=1
|
2
uncompyle6/scanner27.py → uncompyle6/scanners/scanner27.py
Executable file → Normal file
2
uncompyle6/scanner27.py → uncompyle6/scanners/scanner27.py
Executable file → Normal file
@@ -55,7 +55,7 @@ class Scanner27(scan.Scanner):
|
|||||||
while j < start_byte:
|
while j < start_byte:
|
||||||
self.lines.append(linetuple(prev_line_no, start_byte))
|
self.lines.append(linetuple(prev_line_no, start_byte))
|
||||||
j += 1
|
j += 1
|
||||||
(_, prev_line_no) = (start_byte, line_no)
|
prev_line_no = start_byte
|
||||||
while j < n:
|
while j < n:
|
||||||
self.lines.append(linetuple(prev_line_no, n))
|
self.lines.append(linetuple(prev_line_no, n))
|
||||||
j+=1
|
j+=1
|
5
uncompyle6/scanner34.py → uncompyle6/scanners/scanner34.py
Executable file → Normal file
5
uncompyle6/scanner34.py → uncompyle6/scanners/scanner34.py
Executable file → Normal file
@@ -151,7 +151,7 @@ class Scanner34(scan.Scanner):
|
|||||||
'end': codelen-1}]
|
'end': codelen-1}]
|
||||||
|
|
||||||
# All loop entry points
|
# All loop entry points
|
||||||
#self.loops = []
|
# self.loops = []
|
||||||
# Map fixed jumps to their real destination
|
# Map fixed jumps to their real destination
|
||||||
self.fixed_jumps = {}
|
self.fixed_jumps = {}
|
||||||
self.ignore_if = set()
|
self.ignore_if = set()
|
||||||
@@ -186,10 +186,9 @@ class Scanner34(scan.Scanner):
|
|||||||
targets[label] = targets.get(label, []) + [offset]
|
targets[label] = targets.get(label, []) + [offset]
|
||||||
return targets
|
return targets
|
||||||
|
|
||||||
|
|
||||||
def build_statement_indices(self):
|
def build_statement_indices(self):
|
||||||
code = self.code
|
code = self.code
|
||||||
start = 0;
|
start = 0
|
||||||
end = codelen = len(code)
|
end = codelen = len(code)
|
||||||
|
|
||||||
statement_opcodes = {
|
statement_opcodes = {
|
@@ -167,13 +167,13 @@ def cmp_code_objects(version, code_obj1, code_obj2, name=''):
|
|||||||
pass
|
pass
|
||||||
elif member == 'co_code':
|
elif member == 'co_code':
|
||||||
if version == 2.7:
|
if version == 2.7:
|
||||||
import scanner27 as scan
|
import uncompyle6.scanners.scanner27 as scan
|
||||||
scanner = scan.Scanner27()
|
scanner = scan.Scanner27()
|
||||||
elif version == 2.6:
|
elif version == 2.6:
|
||||||
import scanner26 as scan
|
import uncompyle6.scanners.scanner26 as scan
|
||||||
scanner = scan.Scanner26()
|
scanner = scan.Scanner26()
|
||||||
elif version == 2.5:
|
elif version == 2.5:
|
||||||
import scanner25 as scan
|
import uncompyle65.scanners.scanner25 as scan
|
||||||
scanner = scan.Scanner25()
|
scanner = scan.Scanner25()
|
||||||
scanner.setShowAsm( showasm=0 )
|
scanner.setShowAsm( showasm=0 )
|
||||||
global JUMP_OPs
|
global JUMP_OPs
|
||||||
|
Reference in New Issue
Block a user