home *** CD-ROM | disk | FTP | other *** search
/ BMUG PD-ROM A / PD-ROM A.iso / Programming / Programming Languages / Gambit LISP / trace.scm < prev    next >
Encoding:
Text File  |  1991-01-28  |  967 b   |  34 lines  |  [TEXT/gamI]

  1. ; Trace macro
  2.  
  3. (##define-macro (trace name)
  4.   `(let ((##old ,name))
  5.      (set! ,name
  6.        (lambda l
  7.          (let ((env (##entry-of ',name l)))
  8.            (##return-of ',name (apply ##old l) env))))))
  9.  
  10. (define (##entry-of name l)
  11.   (let ((indent (+ (##fluid-ref '##indent 0) 1)))
  12.     (let ((env (##fluid-bind '##indent indent)))
  13.       (let loop ((i 0))
  14.         (if (< i indent)
  15.           (begin
  16.             (display (if (= (remainder i 5) 0) "|" " ") ##stdout)
  17.             (loop (+ i 1)))))
  18.       (##wr-limited (cons name l) ##stdout #f #t (- 79 indent))
  19.       (newline ##stdout)
  20.       env)))
  21.  
  22. (define (##return-of name val env)
  23.   (let ((indent (##fluid-ref '##indent 0)))
  24.     (let loop ((i 0))
  25.       (if (< i indent)
  26.         (begin
  27.           (display (if (= (remainder i 5) 0) "|" " ") ##stdout)
  28.           (loop (+ i 1)))))
  29.     (display "<== " ##stdout)
  30.     (##wr-limited val ##stdout #f #t (- 75 indent))
  31.     (newline ##stdout)
  32.     (##fluid-unbind env)
  33.     val))
  34.