You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-03 08:49:51 +08:00
Suppress arg in dissassembly if there is none
This commit is contained in:
@@ -121,15 +121,18 @@ class Scanner2(scan.Scanner):
|
|||||||
if offset in cf:
|
if offset in cf:
|
||||||
k = 0
|
k = 0
|
||||||
for j in cf[offset]:
|
for j in cf[offset]:
|
||||||
tokens.append(Token('COME_FROM', None, repr(j),
|
tokens.append(Token(
|
||||||
offset="%s_%d" % (offset, k)))
|
'COME_FROM', None, repr(j),
|
||||||
|
offset="%s_%d" % (offset, k),
|
||||||
|
has_arg = True))
|
||||||
k += 1
|
k += 1
|
||||||
|
|
||||||
op = self.code[offset]
|
op = self.code[offset]
|
||||||
opname = self.opc.opname[op]
|
opname = self.opc.opname[op]
|
||||||
|
|
||||||
oparg = None; pattr = None
|
oparg = None; pattr = None
|
||||||
if op >= self.opc.HAVE_ARGUMENT:
|
has_arg = (op >= self.opc.HAVE_ARGUMENT)
|
||||||
|
if has_arg:
|
||||||
oparg = self.get_argument(offset) + extended_arg
|
oparg = self.get_argument(offset) + extended_arg
|
||||||
extended_arg = 0
|
extended_arg = 0
|
||||||
if op == self.opc.EXTENDED_ARG:
|
if op == self.opc.EXTENDED_ARG:
|
||||||
@@ -204,9 +207,11 @@ class Scanner2(scan.Scanner):
|
|||||||
linestart = None
|
linestart = None
|
||||||
|
|
||||||
if offset not in replace:
|
if offset not in replace:
|
||||||
tokens.append(Token(opname, oparg, pattr, offset, linestart))
|
tokens.append(Token(
|
||||||
|
opname, oparg, pattr, offset, linestart, op, has_arg))
|
||||||
else:
|
else:
|
||||||
tokens.append(Token(replace[offset], oparg, pattr, offset, linestart))
|
tokens.append(Token(
|
||||||
|
replace[offset], oparg, pattr, offset, linestart, op, has_arg))
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@@ -179,10 +179,12 @@ class Scanner26(scan.Scanner2):
|
|||||||
k = 0
|
k = 0
|
||||||
for j in cf[offset]:
|
for j in cf[offset]:
|
||||||
tokens.append(Token('COME_FROM', None, repr(j),
|
tokens.append(Token('COME_FROM', None, repr(j),
|
||||||
offset="%s_%d" % (offset, k) ))
|
offset="%s_%d" % (offset, k),
|
||||||
|
has_arg = True))
|
||||||
k += 1
|
k += 1
|
||||||
|
|
||||||
if self.op_hasArgument(op):
|
has_arg = (op >= self.opc.HAVE_ARGUMENT)
|
||||||
|
if has_arg:
|
||||||
oparg = self.get_argument(offset) + extended_arg
|
oparg = self.get_argument(offset) + extended_arg
|
||||||
extended_arg = 0
|
extended_arg = 0
|
||||||
if op == self.opc.EXTENDED_ARG:
|
if op == self.opc.EXTENDED_ARG:
|
||||||
@@ -282,9 +284,11 @@ class Scanner26(scan.Scanner2):
|
|||||||
linestart = None
|
linestart = None
|
||||||
|
|
||||||
if offset not in replace:
|
if offset not in replace:
|
||||||
tokens.append(Token(op_name, oparg, pattr, offset, linestart))
|
tokens.append(Token(
|
||||||
|
op_name, oparg, pattr, offset, linestart, op, has_arg))
|
||||||
else:
|
else:
|
||||||
tokens.append(Token(replace[offset], oparg, pattr, offset, linestart))
|
tokens.append(Token(
|
||||||
|
replace[offset], oparg, pattr, offset, linestart, op, has_arg))
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@@ -173,7 +173,8 @@ class Scanner3(scan.Scanner):
|
|||||||
jump_idx = 0
|
jump_idx = 0
|
||||||
for jump_offset in jump_targets[inst.offset]:
|
for jump_offset in jump_targets[inst.offset]:
|
||||||
tokens.append(Token('COME_FROM', None, repr(jump_offset),
|
tokens.append(Token('COME_FROM', None, repr(jump_offset),
|
||||||
offset='%s_%s' % (inst.offset, jump_idx)))
|
offset='%s_%s' % (inst.offset, jump_idx),
|
||||||
|
has_arg = True))
|
||||||
jump_idx += 1
|
jump_idx += 1
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
@@ -221,8 +222,11 @@ class Scanner3(scan.Scanner):
|
|||||||
attr = (pos_args, name_pair_args, annotate_args),
|
attr = (pos_args, name_pair_args, annotate_args),
|
||||||
pattr = pattr,
|
pattr = pattr,
|
||||||
offset = inst.offset,
|
offset = inst.offset,
|
||||||
linestart = inst.starts_line)
|
linestart = inst.starts_line,
|
||||||
|
op = op,
|
||||||
|
has_arg = (op >= op3.HAVE_ARGUMENT)
|
||||||
)
|
)
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
elif op in self.varargs:
|
elif op in self.varargs:
|
||||||
pos_args = inst.argval
|
pos_args = inst.argval
|
||||||
@@ -278,6 +282,8 @@ class Scanner3(scan.Scanner):
|
|||||||
pattr = pattr,
|
pattr = pattr,
|
||||||
offset = inst.offset,
|
offset = inst.offset,
|
||||||
linestart = inst.starts_line,
|
linestart = inst.starts_line,
|
||||||
|
op = op,
|
||||||
|
has_arg = (op >= op3.HAVE_ARGUMENT)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
pass
|
pass
|
||||||
@@ -374,7 +380,8 @@ class Scanner3(scan.Scanner):
|
|||||||
# since 2.3
|
# since 2.3
|
||||||
self.detect_structure(offset)
|
self.detect_structure(offset)
|
||||||
|
|
||||||
if op >= op3.HAVE_ARGUMENT:
|
has_arg = (op >= op3.HAVE_ARGUMENT)
|
||||||
|
if has_arg:
|
||||||
label = self.fixed_jumps.get(offset)
|
label = self.fixed_jumps.get(offset)
|
||||||
oparg = code[offset+1] + code[offset+2] * 256
|
oparg = code[offset+1] + code[offset+2] * 256
|
||||||
|
|
||||||
|
@@ -20,8 +20,11 @@ class Token:
|
|||||||
# linestart = starts_line
|
# linestart = starts_line
|
||||||
# attr = argval
|
# attr = argval
|
||||||
# pattr = argrepr
|
# pattr = argrepr
|
||||||
def __init__(self, type_, attr=None, pattr=None, offset=-1, linestart=None):
|
def __init__(self, type_, attr=None, pattr=None, offset=-1,
|
||||||
|
linestart=None, op=None, has_arg=None):
|
||||||
self.type = intern(type_)
|
self.type = intern(type_)
|
||||||
|
self.op = op
|
||||||
|
self.has_arg = has_arg
|
||||||
self.attr = attr
|
self.attr = attr
|
||||||
self.pattr = pattr
|
self.pattr = pattr
|
||||||
self.offset = offset
|
self.offset = offset
|
||||||
@@ -50,7 +53,10 @@ class Token:
|
|||||||
offset_opname = '%6s %-17s' % (self.offset, self.type)
|
offset_opname = '%6s %-17s' % (self.offset, self.type)
|
||||||
argstr = "%6d " % self.attr if isinstance(self.attr, int) else (' '*7)
|
argstr = "%6d " % self.attr if isinstance(self.attr, int) else (' '*7)
|
||||||
pattr = self.pattr if self.pattr is not None else ''
|
pattr = self.pattr if self.pattr is not None else ''
|
||||||
return "%s%s%s %r" % (prefix, offset_opname, argstr, pattr)
|
if self.has_arg:
|
||||||
|
return "%s%s%s %r" % (prefix, offset_opname, argstr, pattr)
|
||||||
|
else:
|
||||||
|
return "%s%s" % (prefix, offset_opname)
|
||||||
|
|
||||||
def __hash__(self):
|
def __hash__(self):
|
||||||
return hash(self.type)
|
return hash(self.type)
|
||||||
|
Reference in New Issue
Block a user