racket/collects/errortrace/errortrace-key.rkt

36 lines
1.1 KiB
Racket

(module errortrace-key '#%kernel
;; this file is badly named; it contains
;; all of the code used at runtime by the
;; various annotations inserted by this
;; library.
;; Defining `errortrace-key' as a funciton is a performance hack:
;; the compiler can track function constants, and in particular the
;; fact that it's not an impersonated/chaperoned mark key, so that a
;; `with-continuation-mark' using this key can be dropped if the
;; body expression is simple.
(define-values (errortrace-key) (lambda () 'anything))
(define-values (test-coverage-info)
(make-parameter
(make-hash)
(λ (x)
(if (hash? x)
(void)
(error 'test-coverage-info "expected a hash, got ~e" x))
x)))
(define-values (test-covered)
(lambda (key)
(hash-set! (test-coverage-info) key #t)))
(define-values (init-test-coverage)
(lambda (l)
(hash-set! (test-coverage-info) 'base l)))
(#%provide errortrace-key
init-test-coverage
test-covered
test-coverage-info))