circuitpython/tests/micropython/heapalloc_traceback.py
Paul Sokolovsky e02cb9ec31 tests/heapalloc_*: Refactor some tests to work in strict stackless mode.
In strict stackless mode, it's not possible to make a function call with
heap locked (because function activation record aka frame is allocated on
heap). So, if the only purpose of function is to introduce local variable
scope, move heap lock/unlock calls inside the function.
2017-12-11 12:00:41 +02:00

41 lines
887 B
Python

# test that we can generate a traceback without allocating
import micropython
import sys
try:
import uio
except ImportError:
print("SKIP")
raise SystemExit
# preallocate exception instance with some room for a traceback
global_exc = StopIteration()
try:
raise global_exc
except:
pass
def test():
micropython.heap_lock()
global global_exc
global_exc.__traceback__ = None
try:
raise global_exc
except StopIteration:
print('StopIteration')
micropython.heap_unlock()
# call test() with heap allocation disabled
test()
# print the exception that was raised
buf = uio.StringIO()
sys.print_exception(global_exc, buf)
for l in buf.getvalue().split("\n"):
# uPy on pyboard prints <stdin> as file, so remove filename.
if l.startswith(" File "):
l = l.split('"')
print(l[0], l[2])
else:
print(l)