[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