Replaced unstable/debug with unstable/cce/debug.
This commit is contained in:
parent
5faced0c23
commit
ddc889532e
21
collects/tests/unstable/debug.rkt
Normal file
21
collects/tests/unstable/debug.rkt
Normal file
|
@ -0,0 +1,21 @@
|
|||
#lang racket
|
||||
|
||||
(require rackunit rackunit/text-ui unstable/debug "helpers.rkt")
|
||||
|
||||
(run-tests
|
||||
(test-suite "debug.ss"
|
||||
(test-suite "dprintf"
|
||||
(test
|
||||
(let ()
|
||||
(define logger (make-logger))
|
||||
(define receiver (make-log-receiver logger 'debug))
|
||||
(parameterize ([current-logger logger])
|
||||
(dprintf "Danger, ~a!" "Will Robinson"))
|
||||
(check-not-false
|
||||
(member
|
||||
"Danger, Will Robinson!"
|
||||
(let loop ()
|
||||
(match (sync/timeout 0 receiver)
|
||||
[(vector 'debug (? string? message) _)
|
||||
(cons message (loop))]
|
||||
[_ null])))))))))
|
|
@ -47,7 +47,7 @@ don't depend on any other portion of the system
|
|||
(when (and (warn-unreachable?)
|
||||
(log-level? l 'warning)
|
||||
(and (syntax-transforming?) (syntax-original? (syntax-local-introduce e)))
|
||||
#;(and (orig-module-stx) (eq? (debug/call syntax-source-module e) (debug/call syntax-source-module (orig-module-stx))))
|
||||
#;(and (orig-module-stx) (eq? (call/debug syntax-source-module e) (call/debug syntax-source-module (orig-module-stx))))
|
||||
#;(syntax-source-module stx))
|
||||
(log-message l 'warning (format "Typed Scheme has detected unreachable code: ~e" (syntax->datum (locate-stx e)))
|
||||
e))))
|
||||
|
|
|
@ -1,161 +0,0 @@
|
|||
#lang scheme
|
||||
|
||||
(provide debug
|
||||
dprintf
|
||||
begin/debug
|
||||
define/debug
|
||||
define/private/debug
|
||||
define/public/debug
|
||||
define/override/debug
|
||||
define/augment/debug
|
||||
let/debug
|
||||
let*/debug
|
||||
letrec/debug
|
||||
let-values/debug
|
||||
let*-values/debug
|
||||
letrec-values/debug
|
||||
with-syntax/debug
|
||||
with-syntax*/debug
|
||||
parameterize/debug
|
||||
with-debugging)
|
||||
|
||||
(require unstable/srcloc
|
||||
unstable/location
|
||||
unstable/syntax
|
||||
(for-syntax scheme/match syntax/parse unstable/syntax))
|
||||
|
||||
(define-syntax (let/debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ (~optional loop:id) ([lhs:id rhs:expr] ...) body:expr ...+)
|
||||
#`(with-debugging
|
||||
#:name '#,(if (attribute loop) #'loop #'let/debug)
|
||||
#:source (quote-srcloc #,stx)
|
||||
(let #,@(if (attribute loop) (list #'loop) null)
|
||||
([lhs (with-debugging #:name 'lhs rhs)] ...)
|
||||
(debug body) ...))]))
|
||||
|
||||
(define-syntaxes
|
||||
[ let*/debug
|
||||
letrec/debug
|
||||
let-values/debug
|
||||
let*-values/debug
|
||||
letrec-values/debug
|
||||
with-syntax/debug
|
||||
with-syntax*/debug
|
||||
parameterize/debug ]
|
||||
|
||||
(let ()
|
||||
|
||||
(define ((expander binder-id) stx)
|
||||
(with-syntax ([binder binder-id])
|
||||
(syntax-parse stx
|
||||
[(binder/debug:id ([lhs rhs:expr] ...) body:expr ...+)
|
||||
#`(with-debugging
|
||||
#:name 'binder/debug
|
||||
#:source (quote-srcloc #,stx)
|
||||
(binder
|
||||
([lhs (with-debugging #:name 'lhs rhs)] ...)
|
||||
(debug body) ...))])))
|
||||
|
||||
(values (expander #'let*)
|
||||
(expander #'letrec)
|
||||
(expander #'let-values)
|
||||
(expander #'let*-values)
|
||||
(expander #'letrec-values)
|
||||
(expander #'with-syntax)
|
||||
(expander #'with-syntax*)
|
||||
(expander #'parameterize))))
|
||||
|
||||
(define-syntaxes
|
||||
[ define/debug
|
||||
define/private/debug
|
||||
define/public/debug
|
||||
define/override/debug
|
||||
define/augment/debug ]
|
||||
|
||||
(let ()
|
||||
|
||||
(define-syntax-class header
|
||||
#:attributes [name]
|
||||
(pattern (name:id . _))
|
||||
(pattern (inner:header . _) #:attr name (attribute inner.name)))
|
||||
|
||||
(define ((expander definer-id) stx)
|
||||
(with-syntax ([definer definer-id])
|
||||
(syntax-parse stx
|
||||
[(definer/debug:id name:id body:expr)
|
||||
#`(definer name
|
||||
(with-debugging
|
||||
#:name 'name
|
||||
#:source (quote-srcloc #,stx)
|
||||
body))]
|
||||
[(definer/debug:id spec:header body:expr ...+)
|
||||
#`(definer spec
|
||||
(with-debugging
|
||||
#:name 'spec.name
|
||||
#:source (quote-srcloc #,stx)
|
||||
(let () body ...)))])))
|
||||
|
||||
(values (expander #'define)
|
||||
(expander #'define/private)
|
||||
(expander #'define/public)
|
||||
(expander #'define/override)
|
||||
(expander #'define/augment))))
|
||||
|
||||
(define-syntax (begin/debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ term:expr ...)
|
||||
#`(with-debugging
|
||||
#:name 'begin/debug
|
||||
#:source (quote-srcloc #,stx)
|
||||
(begin (debug term) ...))]))
|
||||
|
||||
(define-syntax (debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ term:expr)
|
||||
(syntax (with-debugging term))]))
|
||||
|
||||
(define-syntax (with-debugging stx)
|
||||
(syntax-parse stx
|
||||
[(_ (~or (~optional (~seq #:name name:expr))
|
||||
(~optional (~seq #:source source:expr)))
|
||||
...
|
||||
body:expr)
|
||||
(with-syntax* ([name (or (attribute name) #'(quote body))]
|
||||
[source (or (attribute source) #'(quote-srcloc body))])
|
||||
#'(with-debugging/proc
|
||||
name
|
||||
source
|
||||
(quote body)
|
||||
(lambda () (#%expression body))))]))
|
||||
|
||||
(define (with-debugging/proc name source term thunk)
|
||||
(let* ([src (source-location->prefix source)])
|
||||
(begin
|
||||
(dprintf ">> ~a~s" src name)
|
||||
(begin0
|
||||
(parameterize ([current-debug-depth
|
||||
(add1 (current-debug-depth))])
|
||||
(call-with-values thunk
|
||||
(lambda results
|
||||
(match results
|
||||
[(list v) (dprintf "~s" v)]
|
||||
[(list vs ...)
|
||||
(dprintf "(values~a)"
|
||||
(apply string-append
|
||||
(for/list ([v (in-list vs)])
|
||||
(format " ~s" v))))])
|
||||
(apply values results))))
|
||||
(dprintf "<< ~a~s" src name)))))
|
||||
|
||||
(define (dprintf fmt . args)
|
||||
(let* ([message (apply format fmt args)]
|
||||
[prefix (make-string (* debug-indent (current-debug-depth)) #\space)]
|
||||
[indented
|
||||
(string-append
|
||||
prefix
|
||||
(regexp-replace* "\n" message (string-append "\n" prefix)))])
|
||||
(log-debug indented)))
|
||||
|
||||
(define current-debug-depth (make-parameter 0))
|
||||
(define debug-indent 2)
|
|
@ -1,71 +0,0 @@
|
|||
#lang scribble/doc
|
||||
@(require scribble/manual
|
||||
scribble/eval
|
||||
unstable/scribble
|
||||
"eval.ss")
|
||||
@(require (for-label scheme unstable/cce/debug unstable/syntax))
|
||||
|
||||
@title[#:style 'quiet #:tag "cce-debug"]{Debugging}
|
||||
|
||||
@defmodule[unstable/cce/debug]
|
||||
|
||||
This module provides macros and functions for printing out debugging
|
||||
information.
|
||||
|
||||
@defform[(debug expr)]{
|
||||
|
||||
Logs debugging information before and after the evaluation of expression
|
||||
@scheme[expr].
|
||||
|
||||
}
|
||||
|
||||
@defform/subs[
|
||||
(with-debugging options ... expr)
|
||||
([options (code:line #:name name-expr)
|
||||
(code:line #:source srcloc-expr)])
|
||||
]{
|
||||
|
||||
Logs debugging information like @scheme[debug], with the option of explicitly
|
||||
overriding the name and source location information for the expression.
|
||||
|
||||
}
|
||||
|
||||
@defproc[(dprintf [fmt string?] [arg any/c] ...) void?]{
|
||||
|
||||
Constructs a message in the same manner as @scheme[format], and logs it at the
|
||||
debugging priority (like @scheme[log-debug]).
|
||||
|
||||
}
|
||||
|
||||
@deftogether[(
|
||||
@defform[(begin/debug expr ...)]
|
||||
@defform*[[(define/debug id expr)
|
||||
(define/debug (head args) body ...+)]]
|
||||
@defform*[[(define/private/debug id expr)
|
||||
(define/private/debug (head args) body ...+)]]
|
||||
@defform*[[(define/public/debug id expr)
|
||||
(define/public/debug (head args) body ...+)]]
|
||||
@defform*[[(define/override/debug id expr)
|
||||
(define/override/debug (head args) body ...+)]]
|
||||
@defform*[[(define/augment/debug id expr)
|
||||
(define/augment/debug (head args) body ...+)]]
|
||||
@defform*[[(let/debug ([lhs-id rhs-expr] ...) body ...+)
|
||||
(let/debug loop-id ([lhs-id rhs-expr] ...) body ...+)]]
|
||||
@defform[(let*/debug ([lhs-id rhs-expr] ...) body ...+)]
|
||||
@defform[(letrec/debug ([lhs-id rhs-expr] ...) body ...+)]
|
||||
@defform[(let-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(let*-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(letrec-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(with-syntax/debug ([pattern stx-expr] ...) body ...+)]
|
||||
@defform[(with-syntax*/debug ([pattern stx-expr] ...) body ...+)]
|
||||
@defform[(parameterize/debug ([param-expr value-expr] ...) body ...+)]
|
||||
)]{
|
||||
|
||||
These macros add logging based on @scheme[with-debugging] to the evaluation of
|
||||
expressions in @scheme[begin], @scheme[define], @scheme[define/private],
|
||||
@scheme[define/public], @scheme[define/override], @scheme[define/augment],
|
||||
@scheme[let], @scheme[let*], @scheme[letrec], @scheme[let-values],
|
||||
@scheme[let*-values], @scheme[letrec-values], @scheme[with-syntax],
|
||||
@scheme[with-syntax*], and @scheme[parameterize].
|
||||
|
||||
}
|
|
@ -9,5 +9,3 @@
|
|||
@unstable[@author+email["Carl Eastlund" "cce@racket-lang.org"]]
|
||||
|
||||
@table-of-contents[]
|
||||
|
||||
@include-section["debug.scrbl"]
|
||||
|
|
|
@ -1,24 +0,0 @@
|
|||
#lang scheme
|
||||
|
||||
(require "checks.ss"
|
||||
"../debug.ss")
|
||||
|
||||
(provide debug-suite)
|
||||
|
||||
(define debug-suite
|
||||
(test-suite "debug.ss"
|
||||
(test-suite "dprintf"
|
||||
(test
|
||||
(let ()
|
||||
(define logger (make-logger))
|
||||
(define receiver (make-log-receiver logger 'debug))
|
||||
(parameterize ([current-logger logger])
|
||||
(dprintf "Danger, ~a!" "Will Robinson"))
|
||||
(check-not-false
|
||||
(member
|
||||
"Danger, Will Robinson!"
|
||||
(let loop ()
|
||||
(match (sync/timeout 0 receiver)
|
||||
[(vector 'debug (? string? message) _)
|
||||
(cons message (loop))]
|
||||
[_ null])))))))))
|
|
@ -1,8 +1,6 @@
|
|||
#lang scheme
|
||||
|
||||
(require "checks.ss"
|
||||
"test-debug.ss")
|
||||
(require "checks.ss")
|
||||
|
||||
(run-tests
|
||||
(test-suite "scheme.plt"
|
||||
debug-suite))
|
||||
(test-suite "scheme.plt"))
|
||||
|
|
|
@ -1,39 +1,176 @@
|
|||
#lang racket/base
|
||||
#lang racket
|
||||
|
||||
(provide
|
||||
(rename-out
|
||||
[debug debug/call]
|
||||
[debugm debug/macro]))
|
||||
(provide debug
|
||||
dprintf
|
||||
call/debug
|
||||
begin/debug
|
||||
define/debug
|
||||
define/private/debug
|
||||
define/public/debug
|
||||
define/override/debug
|
||||
define/augment/debug
|
||||
let/debug
|
||||
let*/debug
|
||||
letrec/debug
|
||||
let-values/debug
|
||||
let*-values/debug
|
||||
letrec-values/debug
|
||||
with-syntax/debug
|
||||
with-syntax*/debug
|
||||
parameterize/debug
|
||||
with-debugging)
|
||||
|
||||
;; printf debugging convenience
|
||||
(define-syntax debug
|
||||
(syntax-rules ()
|
||||
[(_ (f . args))
|
||||
(begin (printf "starting ~a (~a)~n" 'f f)
|
||||
(let ([l (list . args)])
|
||||
(printf "arguments are:~n")
|
||||
(for/list ([arg 'args]
|
||||
[val l])
|
||||
(printf "\t~a: ~a~n" arg val))
|
||||
(let ([e (with-handlers ([values (lambda (exn)
|
||||
(printf "~a raised exception ~a~n" 'f exn)
|
||||
(raise exn))])
|
||||
(call-with-values (lambda () (apply f l)) list))])
|
||||
(if (and (pair? e) (null? (cdr e)))
|
||||
(printf "~a result was ~a~n" 'f (car e))
|
||||
(printf "~a results were ~a~n" 'f e))
|
||||
(apply values e))))]
|
||||
[(_ f . args) (debug (f . args))]))
|
||||
(require unstable/srcloc
|
||||
unstable/location
|
||||
unstable/syntax
|
||||
(for-syntax racket/match syntax/parse unstable/syntax))
|
||||
|
||||
(define-syntax debugm
|
||||
(syntax-rules ()
|
||||
[(_ kw . forms)
|
||||
(begin (printf "starting ~a\n" 'kw)
|
||||
(let ([e (with-handlers ([values (lambda (exn)
|
||||
(printf "~a raised exception ~a~n" 'kw exn)
|
||||
(raise exn))])
|
||||
(call-with-values (lambda () (kw . forms)) list))])
|
||||
(if (and (pair? e) (null? (cdr e)))
|
||||
(printf "~a result was ~a~n" 'kw (car e))
|
||||
(printf "~a results were ~a~n" 'kw e))
|
||||
(apply values e)))]))
|
||||
(define-syntax (let/debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ (~optional loop:id) ([lhs:id rhs:expr] ...) body:expr ...+)
|
||||
#`(with-debugging
|
||||
#:name '#,(if (attribute loop) #'loop #'let/debug)
|
||||
#:source (quote-srcloc #,stx)
|
||||
(let #,@(if (attribute loop) (list #'loop) null)
|
||||
([lhs (with-debugging #:name 'lhs rhs)] ...)
|
||||
(debug body) ...))]))
|
||||
|
||||
(define-syntaxes
|
||||
[ let*/debug
|
||||
letrec/debug
|
||||
let-values/debug
|
||||
let*-values/debug
|
||||
letrec-values/debug
|
||||
with-syntax/debug
|
||||
with-syntax*/debug
|
||||
parameterize/debug ]
|
||||
|
||||
(let ()
|
||||
|
||||
(define ((expander binder-id) stx)
|
||||
(with-syntax ([binder binder-id])
|
||||
(syntax-parse stx
|
||||
[(binder/debug:id ([lhs rhs:expr] ...) body:expr ...+)
|
||||
#`(with-debugging
|
||||
#:name 'binder/debug
|
||||
#:source (quote-srcloc #,stx)
|
||||
(binder
|
||||
([lhs (with-debugging #:name 'lhs rhs)] ...)
|
||||
(debug body) ...))])))
|
||||
|
||||
(values (expander #'let*)
|
||||
(expander #'letrec)
|
||||
(expander #'let-values)
|
||||
(expander #'let*-values)
|
||||
(expander #'letrec-values)
|
||||
(expander #'with-syntax)
|
||||
(expander #'with-syntax*)
|
||||
(expander #'parameterize))))
|
||||
|
||||
(define-syntaxes
|
||||
[ define/debug
|
||||
define/private/debug
|
||||
define/public/debug
|
||||
define/override/debug
|
||||
define/augment/debug ]
|
||||
|
||||
(let ()
|
||||
|
||||
(define-syntax-class header
|
||||
#:attributes [name]
|
||||
(pattern (name:id . _))
|
||||
(pattern (inner:header . _) #:attr name (attribute inner.name)))
|
||||
|
||||
(define ((expander definer-id) stx)
|
||||
(with-syntax ([definer definer-id])
|
||||
(syntax-parse stx
|
||||
[(definer/debug:id name:id body:expr)
|
||||
#`(definer name
|
||||
(with-debugging
|
||||
#:name 'name
|
||||
#:source (quote-srcloc #,stx)
|
||||
body))]
|
||||
[(definer/debug:id spec:header body:expr ...+)
|
||||
#`(definer spec
|
||||
(with-debugging
|
||||
#:name 'spec.name
|
||||
#:source (quote-srcloc #,stx)
|
||||
(let () body ...)))])))
|
||||
|
||||
(values (expander #'define)
|
||||
(expander #'define/private)
|
||||
(expander #'define/public)
|
||||
(expander #'define/override)
|
||||
(expander #'define/augment))))
|
||||
|
||||
(define-syntax (begin/debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ term:expr ...)
|
||||
#`(with-debugging
|
||||
#:name 'begin/debug
|
||||
#:source (quote-srcloc #,stx)
|
||||
(begin (debug term) ...))]))
|
||||
|
||||
(define-syntax (debug stx)
|
||||
(syntax-parse stx
|
||||
[(_ term:expr)
|
||||
(syntax (with-debugging term))]))
|
||||
|
||||
(define-syntax (call/debug stx)
|
||||
|
||||
(define-splicing-syntax-class argument
|
||||
#:attributes ([debug 1])
|
||||
(pattern arg:expr #:attr [debug 1] #'[(debug arg)])
|
||||
(pattern (~seq kw:keyword arg:expr) #:attr [debug 1] #'[kw (debug arg)]))
|
||||
|
||||
(syntax-parse stx
|
||||
[(_ f:expr arg:argument ...)
|
||||
#`(with-debugging
|
||||
#:name 'call/debug
|
||||
#:source (quote-srcloc #,stx)
|
||||
(#%app (debug f) arg.debug ... ...))]))
|
||||
|
||||
(define-syntax (with-debugging stx)
|
||||
(syntax-parse stx
|
||||
[(_ (~or (~optional (~seq #:name name:expr))
|
||||
(~optional (~seq #:source source:expr)))
|
||||
...
|
||||
body:expr)
|
||||
(with-syntax* ([name (or (attribute name) #'(quote body))]
|
||||
[source (or (attribute source) #'(quote-srcloc body))])
|
||||
#'(with-debugging/proc
|
||||
name
|
||||
source
|
||||
(quote body)
|
||||
(lambda () (#%expression body))))]))
|
||||
|
||||
(define (with-debugging/proc name source term thunk)
|
||||
(let* ([src (source-location->prefix source)])
|
||||
(begin
|
||||
(dprintf ">> ~a~s" src name)
|
||||
(begin0
|
||||
(parameterize ([current-debug-depth
|
||||
(add1 (current-debug-depth))])
|
||||
(call-with-values thunk
|
||||
(lambda results
|
||||
(match results
|
||||
[(list v) (dprintf "~s" v)]
|
||||
[(list vs ...)
|
||||
(dprintf "(values~a)"
|
||||
(apply string-append
|
||||
(for/list ([v (in-list vs)])
|
||||
(format " ~s" v))))])
|
||||
(apply values results))))
|
||||
(dprintf "<< ~a~s" src name)))))
|
||||
|
||||
(define (dprintf fmt . args)
|
||||
(let* ([message (apply format fmt args)]
|
||||
[prefix (make-string (* debug-indent (current-debug-depth)) #\space)]
|
||||
[indented
|
||||
(string-append
|
||||
prefix
|
||||
(regexp-replace* "\n" message (string-append "\n" prefix)))])
|
||||
(log-debug indented)))
|
||||
|
||||
(define current-debug-depth (make-parameter 0))
|
||||
(define debug-indent 2)
|
||||
|
|
|
@ -1,35 +1,79 @@
|
|||
#lang scribble/doc
|
||||
@(require scribble/base
|
||||
scribble/manual scribble/eval
|
||||
"utils.rkt"
|
||||
(for-label unstable/debug
|
||||
racket/serialize
|
||||
racket/contract
|
||||
racket/base))
|
||||
#lang scribble/manual
|
||||
@(require "utils.rkt" (for-label racket unstable/debug unstable/syntax))
|
||||
|
||||
@title[#:tag "debug"]{Debugging}
|
||||
@(define the-eval (make-base-eval))
|
||||
@(the-eval '(require unstable/debug racket/match))
|
||||
@title{Debugging}
|
||||
|
||||
@defmodule[unstable/debug]
|
||||
|
||||
@unstable-header[]
|
||||
@unstable[@author+email["Carl Eastlund" "cce@racket-lang.org"]]
|
||||
|
||||
This module provides macros and functions for printing out debugging
|
||||
information.
|
||||
|
||||
@defform[(debug expr)]{
|
||||
|
||||
Logs debugging information before and after the evaluation of expression
|
||||
@scheme[expr].
|
||||
|
||||
@defform*[[(debug/call (f args ...))
|
||||
(debug/call f args ...)]]{
|
||||
Produce debugging output for the application of @racket[f], including the values of @racket[args].
|
||||
@examples[#:eval the-eval
|
||||
(debug/call (+ 3 4 (* 5 6)))
|
||||
(debug/call + 1 2 3)
|
||||
]
|
||||
}
|
||||
|
||||
@defform*[[(debug/macro f args ...)]]{
|
||||
Produce debugging output for the application of @racket[f], but does
|
||||
not parse or print args. Suitable for use debugging macros.
|
||||
@examples[#:eval the-eval
|
||||
(debug/macro match (list 1 2 3)
|
||||
[(list x y z) (+ x y z)])
|
||||
(debug/macro + 1 2 3)
|
||||
]
|
||||
@defform/subs[
|
||||
(with-debugging options ... expr)
|
||||
([options (code:line #:name name-expr)
|
||||
(code:line #:source srcloc-expr)])
|
||||
]{
|
||||
|
||||
Logs debugging information like @scheme[debug], with the option of explicitly
|
||||
overriding the name and source location information for the expression.
|
||||
|
||||
}
|
||||
|
||||
@defproc[(dprintf [fmt string?] [arg any/c] ...) void?]{
|
||||
|
||||
Constructs a message in the same manner as @scheme[format], and logs it at the
|
||||
debugging priority (like @scheme[log-debug]).
|
||||
|
||||
}
|
||||
|
||||
@defform/subs[
|
||||
(call/debug function-expr argument ...)
|
||||
([argument argument-expr (code:line argument-keyword argument-expr)])
|
||||
]{
|
||||
|
||||
Logs debugging information for @scheme[(#%app function-expr argument ...)],
|
||||
including the evaluation and results of the function and each argument.
|
||||
|
||||
}
|
||||
|
||||
@deftogether[(
|
||||
@defform[(begin/debug expr ...)]
|
||||
@defform*[[(define/debug id expr)
|
||||
(define/debug (head args) body ...+)]]
|
||||
@defform*[[(define/private/debug id expr)
|
||||
(define/private/debug (head args) body ...+)]]
|
||||
@defform*[[(define/public/debug id expr)
|
||||
(define/public/debug (head args) body ...+)]]
|
||||
@defform*[[(define/override/debug id expr)
|
||||
(define/override/debug (head args) body ...+)]]
|
||||
@defform*[[(define/augment/debug id expr)
|
||||
(define/augment/debug (head args) body ...+)]]
|
||||
@defform*[[(let/debug ([lhs-id rhs-expr] ...) body ...+)
|
||||
(let/debug loop-id ([lhs-id rhs-expr] ...) body ...+)]]
|
||||
@defform[(let*/debug ([lhs-id rhs-expr] ...) body ...+)]
|
||||
@defform[(letrec/debug ([lhs-id rhs-expr] ...) body ...+)]
|
||||
@defform[(let-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(let*-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(letrec-values/debug ([(lhs-id ...) rhs-expr] ...) body ...+)]
|
||||
@defform[(with-syntax/debug ([pattern stx-expr] ...) body ...+)]
|
||||
@defform[(with-syntax*/debug ([pattern stx-expr] ...) body ...+)]
|
||||
@defform[(parameterize/debug ([param-expr value-expr] ...) body ...+)]
|
||||
)]{
|
||||
|
||||
These macros add logging based on @scheme[with-debugging] to the evaluation of
|
||||
expressions in @scheme[begin], @scheme[define], @scheme[define/private],
|
||||
@scheme[define/public], @scheme[define/override], @scheme[define/augment],
|
||||
@scheme[let], @scheme[let*], @scheme[letrec], @scheme[let-values],
|
||||
@scheme[let*-values], @scheme[letrec-values], @scheme[with-syntax],
|
||||
@scheme[with-syntax*], and @scheme[parameterize].
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user