From e020f8f9a96b16ad27d24211ffdbdd472ef17e6c Mon Sep 17 00:00:00 2001 From: rocky Date: Fri, 8 Jul 2016 12:02:28 -0400 Subject: [PATCH] 2.5/2.6 RETURN_VALUE bug --- test/bytecode_2.5/11_return_val.pyc | Bin 0 -> 481 bytes test/bytecode_2.6/11_return_val.pyc | Bin 0 -> 481 bytes test/simple_source/stmts/11_return_val.py | 13 +++++++++++++ uncompyle6/scanners/scanner2.py | 3 ++- uncompyle6/scanners/scanner26.py | 3 --- 5 files changed, 15 insertions(+), 4 deletions(-) create mode 100644 test/bytecode_2.5/11_return_val.pyc create mode 100644 test/bytecode_2.6/11_return_val.pyc create mode 100644 test/simple_source/stmts/11_return_val.py diff --git a/test/bytecode_2.5/11_return_val.pyc b/test/bytecode_2.5/11_return_val.pyc new file mode 100644 index 0000000000000000000000000000000000000000..48368dbba1d8d8973867874cf764cf327e5eabec GIT binary patch literal 481 zcmb79!Ait15Pg$&QHw63;Ms!?H3_a(P@Fg2zE1(llCGbp81lkDnI~)KVgVqn+i@=QKwZKWHMxmMU zCRrM@)uLeldjN$QF;2|o#Dta&eXS%L0j*Rv;n4AP!S}d0$v5~g{N66xL$hI@4fcwnqd>9 zt3Bu&kR{KzTq3Mu=sA~!FWCrN0iA#gJ%rqU( 0: + if isinstance(value, tuple): + value = 'a' + if quote or param: + pass + else: + return '%s=%s' % (param, value) + else: + return param diff --git a/uncompyle6/scanners/scanner2.py b/uncompyle6/scanners/scanner2.py index ee2072bd..f94a5c38 100755 --- a/uncompyle6/scanners/scanner2.py +++ b/uncompyle6/scanners/scanner2.py @@ -720,7 +720,8 @@ class Scanner2(scan.Scanner): self.structs.append({'type': 'if-then', 'start': start, 'end': rtarget}) - self.return_end_ifs.add(pre_rtarget) + if self.version == 2.7 or code[pre_rtarget+1] != self.opc.JUMP_FORWARD: + self.return_end_ifs.add(pre_rtarget) elif op in self.pop_jump_if_or_pop: target = self.get_target(pos, op) diff --git a/uncompyle6/scanners/scanner26.py b/uncompyle6/scanners/scanner26.py index 574f9c50..807e85e7 100755 --- a/uncompyle6/scanners/scanner26.py +++ b/uncompyle6/scanners/scanner26.py @@ -219,9 +219,6 @@ class Scanner26(scan.Scanner2): pattr = repr(offset + 3 + oparg) if op == self.opc.JUMP_FORWARD: target = self.get_target(offset) - if target > offset and self.code[target] == self.opc.RETURN_VALUE: - # Python 2.5 sometimes has this - op_name = 'JUMP_RETURN' # FIXME: this is a hack to catch stuff like: # if x: continue # the "continue" is not on a new line.