Next: expander intro bindings, Previous: expander intro macros, Up: expander intro [Index]
Throughout the code there are several references to different code evaluation times. The following library from [exp1] allows us to explore what those times mean.
(library (times-demo)
(export
call-time invoke-time expand-time visit-time compile-time)
(import (vicare)
(prefix (srfi :19) srfi.))
(define call-time
(lambda ()
(receive-and-return (S)
(srfi.date->string (srfi.current-date))
(printf "call time: ~a\n" S))))
(define invoke-time
(let ((t (receive-and-return (S)
(srfi.date->string (srfi.current-date))
(printf "invoke time: ~a\n" S))))
(lambda () t)))
(define-syntax expand-time
(lambda (stx)
(receive-and-return (S)
(srfi.date->string (srfi.current-date))
(printf "expand time: ~a\n" S))))
(define-syntax visit-time
(let ((t (receive-and-return (S)
(srfi.date->string (srfi.current-date))
(printf "visit time: ~a\n" S))))
(lambda (stx) t)))
(define-syntax compile-time
(lambda (stx)
(let-syntax ((t (lambda (stx)
(receive-and-return (S)
(srfi.date->string (srfi.current-date))
(printf "compile time: ~a\n" S)))))
(t))))
#| end of library |# )