(index ("debug?" 0) ("trace" 216) ("debug" 1623) ("debug-priority" 3223) ("debug/syslog" 3428))
(def (sig (parameter "debug? → #t" (id debug?))) (p "`debug?' turns on or off debugging output, depending on whether it is set to #t or #f; respectively.") (highlight scheme "(define debug? (make-parameter #t))"))
(def (sig (syntax "(trace f) → unspecified" (id trace))) (p "Trace the input to and output from a function.") (dl (dt (tt "f")) (dd "The function to be traced")) (highlight scheme "(define-syntax\n  trace\n  (er-macro-transformer\n    (lambda (expression rename compare)\n      (match-let\n        (((_ f) expression))\n        (let ((%set! (rename 'set!))\n              (%lambda (rename 'lambda))\n              (%call-with-values (rename 'call-with-values))\n              (%apply (rename 'apply))\n              (%format (rename 'format))\n              (%values (rename 'values))\n              (%let (rename 'let))\n              (%f (rename 'f))\n              (%when (rename 'when))\n              (%debug? (rename 'debug?)))\n          `(,%when\n            (,%debug?)\n            (,%let\n             ((,%f ,f))\n             (,%set!\n              ,f\n              (,%lambda\n               x\n               (,%format (current-error-port) \";; Arguments to ~a: ~a~%\" ',f x)\n               (,%let\n                ((return-values\n                   (,%call-with-values\n                    (,%lambda () (,%apply ,%f x))\n                    (,%lambda x x))))\n                (,%format\n                 (current-error-port)\n                 \";; Values from ~a: ~a~%\"\n                 ',f\n                 return-values)\n                (,%apply ,%values return-values)))))))))))"))
(def (sig (syntax "(debug expressions) → unspecified" (id debug))) (p "Debug the expressions to stderr by pretty-printing each expression and their evaluations.") (dl (dt (tt "expressions")) (dd "The expressions to be debugged")) (highlight scheme "(define-syntax\n  debug\n  (syntax-rules\n    ()\n    ((_ x ...)\n     (with-output-to-port\n       (current-error-port)\n       (lambda ()\n         (when (debug?)\n               (pp `(,(if (or (boolean? 'x)\n                              (char? 'x)\n                              (number? 'x)\n                              (string? 'x)\n                              (vector? 'x))\n                        x\n                        `(x =>\n                            ,(handle-exceptions\n                               exn\n                               (let ((message\n                                       ((condition-property-accessor 'exn 'message) exn))\n                                     (arguments\n                                       ((condition-property-accessor 'exn 'arguments)\n                                        exn)))\n                                 (format\n                                   \"Error: ~a~a\"\n                                   message\n                                   (if (null? arguments)\n                                     \"\"\n                                     (format\n                                       \": ~a\"\n                                       (string-join (map ->string arguments) \", \")))))\n                               x)))\n                     ...))))))))"))
(def (sig (parameter "debug-priority → prio/debug" (id debug-priority))) (p "The priority associated with " (tt "debug/syslog")) (highlight scheme "(define debug-priority (make-parameter prio/debug))"))
(def (sig (syntax "(debug/syslog expressions) → unspecified" (id debug/syslog))) (p "Debug to syslog.") (dl (dt (tt "expressions")) (dd "The expressions to debug (cf. `debug' supra)")) (highlight scheme "(define-syntax\n  debug/syslog\n  (ir-macro-transformer\n    (lambda (expression rename inject)\n      `(let ((port (make-syslog-port)))\n         (with-error-output-to-port\n           port\n           (lambda ()\n             (when (debug?)\n                   (debug ,@(cdr expression))\n                   (flush-output port))))))))"))
