anchor.diff:        (varrec-attr-set! varrec 'mode mode)
         (set! index (1+ index)))))
   
  +(define-codegen-sections (begin varrecs . body)
  +  (dolist (varrec varrecs) (varrec-attr-set! varrec 'lambda-label false))
  +  (codegen-sections-forms body out))
  +
   (define-codegen-sections (lambda attrs body)
  -  (let* ((label (gen-label)))
  +  (let* ((label (gen-label))
  +         (self-varrec (attr-ref attrs 'self)))
       (form-attr-set! form 'label label)
  +    (when (and self-varrec (not (varrec-written? self-varrec)))
  +      (varrec-attr-set! (varrec-attr self-varrec 'origin) 'lambda-label label))
  +    (dolist (varrec (attr-ref attrs 'params))
  +      (varrec-attr-set! varrec 'lambda-label false))
  +
       (codegen-sections body out)
   
       (emit out ".text")
  
positive.code:     (emit-mov out (immediate (fixnum-representation (length args)))
                %nargs)
  
      (let* ((func-value (and (eq? 'ref (first func))
                              (varrec-value (second func)))))
        (if func-value
            (emit-call out (form-attr func-value 'label))
            (emit-indirect-call out)))
  
      (emit-restore-%func out)
  
negative.code: ;;; have to rename the original parameter.  This involves wrapping the
  ;;; lambda body with a begin form.
  
  (define (varrec-origin-attr varrec attr)
    (varrec-attr (or (varrec-attr varrec 'origin) varrec) attr))
  
  (define (varrec-boxed? varrec)
    (varrec-origin-attr varrec 'boxed))
  
  (define-walker introduce-boxes () ignore-domain)
  
  