diff options
Diffstat (limited to 'tests/micropython/heapalloc_traceback.py')
-rw-r--r-- | tests/micropython/heapalloc_traceback.py | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/tests/micropython/heapalloc_traceback.py b/tests/micropython/heapalloc_traceback.py new file mode 100644 index 000000000..808df0225 --- /dev/null +++ b/tests/micropython/heapalloc_traceback.py @@ -0,0 +1,36 @@ +# test that we can generate a traceback without allocating + +import micropython +import sys +import uio + +# preallocate exception instance with some room for a traceback +global_exc = StopIteration() +try: + raise global_exc +except: + pass + +def test(): + global global_exc + global_exc.__traceback__ = None + try: + raise global_exc + except StopIteration: + print('StopIteration') + +# call test() with heap allocation disabled +micropython.heap_lock() +test() +micropython.heap_unlock() + +# 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) |