You've already forked python-uncompyle6
mirror of
https://github.com/rocky/python-uncompyle6.git
synced 2025-08-04 01:09:52 +08:00
Fix 3.5, 3.6 while true if/break bug
This commit is contained in:
BIN
test/bytecode_3.5/03_while-if-break.pyc
Normal file
BIN
test/bytecode_3.5/03_while-if-break.pyc
Normal file
Binary file not shown.
BIN
test/bytecode_3.6/03_while-if-break.pyc
Normal file
BIN
test/bytecode_3.6/03_while-if-break.pyc
Normal file
Binary file not shown.
7
test/simple_source/bug35/03_while-if-break.py
Normal file
7
test/simple_source/bug35/03_while-if-break.py
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
# Python 3.5 and 3.6 break inside a
|
||||||
|
# while True and if / break
|
||||||
|
def display_date(loop):
|
||||||
|
while True:
|
||||||
|
if loop.time():
|
||||||
|
break
|
||||||
|
x = 5
|
@@ -109,6 +109,8 @@ class Python35Parser(Python34Parser):
|
|||||||
# differently than 3.3, 3.4
|
# differently than 3.3, 3.4
|
||||||
|
|
||||||
yield_from ::= expr GET_YIELD_FROM_ITER LOAD_CONST YIELD_FROM
|
yield_from ::= expr GET_YIELD_FROM_ITER LOAD_CONST YIELD_FROM
|
||||||
|
|
||||||
|
_ifstmts_jump ::= c_stmts_opt COME_FROM
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def add_custom_rules(self, tokens, customize):
|
def add_custom_rules(self, tokens, customize):
|
||||||
|
@@ -226,7 +226,7 @@ class Scanner(object):
|
|||||||
for given opcode <op>.
|
for given opcode <op>.
|
||||||
"""
|
"""
|
||||||
if op < self.opc.HAVE_ARGUMENT:
|
if op < self.opc.HAVE_ARGUMENT:
|
||||||
return 1
|
return 2 if self.version >= 3.6 else 1
|
||||||
else:
|
else:
|
||||||
return 2 if self.version >= 3.6 else 3
|
return 2 if self.version >= 3.6 else 3
|
||||||
|
|
||||||
|
@@ -851,7 +851,8 @@ class Scanner3(Scanner):
|
|||||||
'start': start,
|
'start': start,
|
||||||
'end': pre_rtarget})
|
'end': pre_rtarget})
|
||||||
self.not_continue.add(pre_rtarget)
|
self.not_continue.add(pre_rtarget)
|
||||||
elif code[pre_rtarget] == self.opc.RETURN_VALUE:
|
elif code[pre_rtarget] in (self.opc.RETURN_VALUE,
|
||||||
|
self.opc.BREAK_LOOP):
|
||||||
self.structs.append({'type': 'if-then',
|
self.structs.append({'type': 'if-then',
|
||||||
'start': start,
|
'start': start,
|
||||||
'end': rtarget})
|
'end': rtarget})
|
||||||
@@ -881,7 +882,12 @@ class Scanner3(Scanner):
|
|||||||
return
|
return
|
||||||
pass
|
pass
|
||||||
pass
|
pass
|
||||||
self.return_end_ifs.add(pre_rtarget)
|
if code[pre_rtarget] == self.opc.RETURN_VALUE:
|
||||||
|
self.return_end_ifs.add(pre_rtarget)
|
||||||
|
else:
|
||||||
|
self.fixed_jumps[offset] = rtarget
|
||||||
|
self.not_continue.add(pre_rtarget)
|
||||||
|
|
||||||
|
|
||||||
elif op == self.opc.SETUP_EXCEPT:
|
elif op == self.opc.SETUP_EXCEPT:
|
||||||
target = self.get_target(offset)
|
target = self.get_target(offset)
|
||||||
|
Reference in New Issue
Block a user