You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
69 lines
1.4 KiB
69 lines
1.4 KiB
4 years ago
|
# Test various loop types, some may be implemented/optimized differently
|
||
|
while True:
|
||
|
try:
|
||
|
break
|
||
|
finally:
|
||
|
print('finally 1')
|
||
|
|
||
|
|
||
|
for i in [1, 5, 10]:
|
||
|
try:
|
||
|
continue
|
||
|
finally:
|
||
|
print('finally 2')
|
||
|
|
||
|
for i in range(3):
|
||
|
try:
|
||
|
continue
|
||
|
finally:
|
||
|
print('finally 3')
|
||
|
|
||
|
# Multi-level
|
||
|
for i in range(4):
|
||
|
print(i)
|
||
|
try:
|
||
|
while True:
|
||
|
try:
|
||
|
try:
|
||
|
break
|
||
|
finally:
|
||
|
print('finally 1')
|
||
|
finally:
|
||
|
print('finally 2')
|
||
|
print('here')
|
||
|
finally:
|
||
|
print('finnaly 3')
|
||
|
|
||
|
# break from within try-finally, within for-loop
|
||
|
for i in [1]:
|
||
|
try:
|
||
|
print(i)
|
||
|
break
|
||
|
finally:
|
||
|
print('finally 4')
|
||
|
|
||
|
# Test unwind-jump where there is nothing in the body of the try or finally.
|
||
|
# This checks that the bytecode emitter allocates enough stack for the unwind.
|
||
|
for i in [1]:
|
||
|
try:
|
||
|
break
|
||
|
finally:
|
||
|
pass
|
||
|
|
||
|
# The following test checks that the globals dict is valid after a call to a
|
||
|
# function that has an unwind jump.
|
||
|
# There was a bug where an unwind jump would trash the globals dict upon return
|
||
|
# from a function, because it used the Python-stack incorrectly.
|
||
|
def f():
|
||
|
for i in [1]:
|
||
|
try:
|
||
|
break
|
||
|
finally:
|
||
|
pass
|
||
|
def g():
|
||
|
global global_var
|
||
|
f()
|
||
|
print(global_var)
|
||
|
global_var = 'global'
|
||
|
g()
|