Fixed one thing in Python 2.7 and break another.

We'll go with this until we get to a more serious refactoring.
This commit is contained in:
rocky
2019-01-05 16:38:07 -05:00
parent fbf51a0ae3
commit df105fbfb2
5 changed files with 34 additions and 3 deletions

View File

@@ -0,0 +1,10 @@
# Python 2.4 (and before?) bug in handling unconditional "else if true"
# Doesn't occur in Python > 2.4
# From Issue #187
def unconditional_if_true_24(foo):
if not foo:
pass
elif 1:
pass
else:
return None

View File

@@ -0,0 +1,22 @@
# Bug in Python 2.7 is code creating a (useless) JUMP_ABSOLUTE to the instruction right after
# the "raise" which causes the
# RUNNABLE!
def testit(a, b):
if a:
if not b:
raise AssertionError("test JUMP_ABSOLUTE to next instruction")
def testit2(a, b):
if a:
if not b:
raise AssertionError("test with dead code after raise")
x = 10
testit(False, True)
testit(False, False)
testit(True, True)
testit2(False, True)
testit2(False, False)
testit2(True, True)

View File

@@ -4,6 +4,7 @@
# try. In 3.x we not distinguising this jump out of the loop with a jump to the # try. In 3.x we not distinguising this jump out of the loop with a jump to the
# end of the "try". # end of the "try".
# RUNNABLE!
def testit(stmts): def testit(stmts):
# Bug was confusing When the except jumps back to the beginning of the block # Bug was confusing When the except jumps back to the beginning of the block

View File

@@ -1,4 +1,4 @@
# Copyright (c) 2016-2018 Rocky Bernstein # Copyright (c) 2016-2019 Rocky Bernstein
# Copyright (c) 2005 by Dan Pascu <dan@windowmaker.org> # Copyright (c) 2005 by Dan Pascu <dan@windowmaker.org>
# Copyright (c) 2000-2002 by hartmut Goebel <hartmut@goebel.noris.de> # Copyright (c) 2000-2002 by hartmut Goebel <hartmut@goebel.noris.de>
@@ -208,8 +208,6 @@ class Python27Parser(Python2Parser):
self.check_reduce['and'] = 'AST' self.check_reduce['and'] = 'AST'
# self.check_reduce['or'] = 'AST' # self.check_reduce['or'] = 'AST'
self.check_reduce['raise_stmt1'] = 'AST' self.check_reduce['raise_stmt1'] = 'AST'
self.check_reduce['assert'] = 'AST'
self.check_reduce['assert2'] = 'AST'
self.check_reduce['list_if_not'] = 'AST' self.check_reduce['list_if_not'] = 'AST'
self.check_reduce['list_if'] = 'AST' self.check_reduce['list_if'] = 'AST'
self.check_reduce['conditional_true'] = 'AST' self.check_reduce['conditional_true'] = 'AST'