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 00000000..48368dbb Binary files /dev/null and b/test/bytecode_2.5/11_return_val.pyc differ diff --git a/test/bytecode_2.6/11_return_val.pyc b/test/bytecode_2.6/11_return_val.pyc new file mode 100644 index 00000000..11cf1636 Binary files /dev/null and b/test/bytecode_2.6/11_return_val.pyc differ diff --git a/test/simple_source/stmts/11_return_val.py b/test/simple_source/stmts/11_return_val.py new file mode 100644 index 00000000..27b8fc4c --- /dev/null +++ b/test/simple_source/stmts/11_return_val.py @@ -0,0 +1,13 @@ +# 2.5.6 decimal.py +# Bug on 2.5 and 2.6 by incorrectly changing opcode to +# RETURN_VALUE to psuedo op: RETURN_END_IF +def _formatparam(param, value=None, quote=True): + if value is not None and len(value) > 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.