(module debug mzscheme
(require
(lib "etc.ss")
(lib "pretty.ss")
(file "base.ss")
(file "log.ss")
(file "parameter.ss")
)
(require-for-syntax
(file "syntax.ss")
)
(provide
(all-defined)
)
(define-parameter debug-enabled?
#t
(lambda (val)
(if (boolean? val)
val
(raise-exn/format exn:fail:unlib
"Expected boolean, received ~a." val)))
with-debug-enabled?)
(define (debug message value)
(if (debug-enabled?)
(log-generic 'D (list message value))
(void))
value)
(define-syntax (define-debug stx)
(syntax-case stx ()
[(debug-define var val)
#`(define var (debug (symbol->string 'var) val))]))
(define-syntax (let-debug stx)
(syntax-case stx ()
[(debug-let ([var val] ...) exp ...)
#'(let ([var (debug (symbol->string 'var) val)] ...)
exp ...)]))
(define-syntax (let*-debug stx)
(syntax-case stx ()
[(debug-let* ([var val] ...) exp ...)
#'(let* ([var (debug (symbol->string 'var) val)] ...)
exp ...)]))
(define-syntax (letrec-debug stx)
(syntax-case stx ()
[(debug-letrec ([var val] ...) exp ...)
#'(letrec ([var (debug (symbol->string 'var) val)] ...)
exp ...)]))
)