[gambit-list] how does make-default-entry-hook work?
lowly coder
lowlycoder at huoyanjinjing.com
Mon Feb 23 03:25:14 EST 2009
Urgh ...
(define (setup
hook)
(let ((settings (##closure-ref hook
1)))
(##vector-set! settings 1
#t)
(if (##not (##memq proc
##trace-list))
(set! ##trace-list (##cons proc ##trace-list)))))
does ##closure-ref do what I think it does? (break the closure abstraction
... and is the "1" like saying "the first var [which just so happens to be
settings]")
this seems awfully hairy + brittle
On Sun, Feb 22, 2009 at 11:33 PM, lowly coder
<lowlycoder at huoyanjinjing.com>wrote:
> In lib/_repl.scm:
>
> (define-prim
> (##make-default-entry-hook)
> (let ((settings (##vector #f
> #f)))
> (lambda (proc args
> execute)
> (if (##vector-ref settings
> 0)
> (##step-on)) ;; turn on
> single-stepping
> (if (##vector-ref settings
> 1)
>
> (##trace-generate
>
> (##make-call-form
> proc
> (##argument-list-remove-absent! args
> '())
>
> ##max-fixnum)
>
> execute
>
>
> #f)
>
> (execute)))))
>
> how does this code work at all? isn't settings #f #f, which would mean the
> first if does nothing, and the first part of the second if also does
> nothing?
>
> is there some funky dynamic-wind / dynamic scope going on here?
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.iro.umontreal.ca/pipermail/gambit-list/attachments/20090223/939e6d2a/attachment.htm>
More information about the Gambit-list
mailing list