# check that we can do certain things without allocating heap memory import micropython import sys def f1(a): print(a) def f2(a, b=2): print(a, b) def f3(a, b, c, d): x1 = x2 = a x3 = x4 = b x5 = x6 = c x7 = x8 = d print(x1, x3, x5, x7, x2 + x4 + x6 + x8) global_var = 1 # preallocate exception instance with some room for a traceback global_exc = StopIteration() try: raise global_exc except: pass def test(): global global_var, global_exc global_var = 2 # set an existing global variable for i in range(2): # for loop f1(i) # function call f1(i * 2 + 1) # binary operation with small ints f1(a=i) # keyword arguments f2(i) # default arg (second one) f2(i, i) # 2 args f3(1, 2, 3, 4) # function with lots of local state # test that we can generate a traceback without allocating global_exc.__traceback__ = None try: raise global_exc except StopIteration as e: sys.print_exception(e) # call test() with heap allocation disabled micropython.heap_lock() test() micropython.heap_unlock()