(defun repeat(n f)
	(while (> n 0)
		(f)
		(set n (- n 1))
	)
)

(defun test-non-local-ret-1(k)
	(repeat 10 (lambda()
		(set k (+ k 2))
		(if (= k 28) (return-from-home k))
	))	

	(return k)
)

(set a (test-non-local-ret-1 20))
(if (/= a 28) (printf "ERROR: a must be 28\n"))
(printf "OK %d\n" a)

(set a (test-non-local-ret-1 21))
(if (/= a 41) (printf "ERROR: a must be 41\n"))
(printf "OK %d\n" a)


(defun ff() (return 999))

## test a normal block return
(set a (ff))
(if (/= a 999) (printf "ERROR: a must be 999\n"))
(printf "OK %d\n" a)

## return from top-level
(return 10)
(printf "ERROR: this line must not be printed\n")