cs019/teach-runtime.rkt
#lang s-exp "../lang/base.rkt"

(provide check-not-undefined)

;; Wrapped around uses of local-bound variables:
(define (check-not-undefined name val)
  (if (eq? val undefined)
      (raise
       (make-exn:fail:contract:variable
        (format "local variable used before its definition: ~a" name)
        (current-continuation-marks)
        name))
      val))
(define undefined (letrec ([x x]) x))