| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- # 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()
|