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@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?