[gambit-list] how does make-default-entry-hook work?

Pavel Dudrenov dudrenov at gmail.com
Mon Feb 23 12:26:53 EST 2009


Reminds me of tkl's upvar. There is probably a good reason for this,
speed or simply no other way to access it.

On Mon, Feb 23, 2009 at 12:25 AM, lowly coder
<lowlycoder at huoyanjinjing.com> wrote:
> 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?
>
>
> _______________________________________________
> Gambit-list mailing list
> Gambit-list at iro.umontreal.ca
> https://webmail.iro.umontreal.ca/mailman/listinfo/gambit-list
>
>



More information about the Gambit-list mailing list