anchor.diff:  (defmacro define-plet-if/fast (name
                                  future/fast
                                  update-task-count/no-lock)
  -  `(defmacro ,name (predicate bindings &body body)
  -     `(%plet/fast ,',future/fast
  +  `(defmacro ,name (kernel predicate bindings &body body)
  +     `(%plet/fast ,kernel
  +                  ,',future/fast
                     ,',update-task-count/no-lock
  -                  (and (accept-task-p) ,predicate)
  +                  (and (accept-task-p ,kernel) ,predicate)
                     ,bindings ,body)))
   
   (define-plet-if/fast plet-if/fast
  
positive.code:     (multiple-value-bind (wrapper-params call-impl)
          (if (has-lambda-list-keyword-p params)
              (values `(&rest ,args)
                      `(apply (function ,impl-name) ,args))
              (values params
                      `(,impl-name ,@params)))
        `(defun ,wrapper-name ,wrapper-params
           (macrolet ((call-impl () ',call-impl))
             ,@body)))))
  
negative.code:                          :collect (gensym (symbol-name name)))))
       ,@body))
  
  (defmacro future-let (&key kernel future force bindings pre-body body)
    (with-parsed-body (nil declares body)
      (with-parsed-let-args (pairs non-pairs syms) bindings
        `(symbol-macrolet ,(loop
                              :for sym :in syms
                              :for (name nil) :in pairs
                              :collect `(,name (,force ,@(unsplice kernel) ,sym)))
           (let (,@(loop
                      :for sym :in syms
                      :for (nil form) :in pairs
                      :collect `(,sym (,future ,@(unsplice kernel) ,form)))
                 ,@non-pairs)
             ,@declares
             ,@(unsplice pre-body)
  