anchor.diff:  	    (0 (make-let*)
   	       (setq body (cons (mvform-form (binding-mvform binding))
   				body)))
  -	    (1 (push `(,(variable-name (car (binding-variables binding)))
  -		       ,(mvform-form (binding-mvform binding)))
  -		     let-bindings))
  +	    (1 (let ((form (mvform-form (binding-mvform binding))))
  +		 (push (if (equal '(values) form)
  +			   ;; Lexical binding without useful values
  +			   (variable-name (car (binding-variables binding)))
  +			   ;; Lexical binding with useful values
  +			   `(,(variable-name (car (binding-variables binding)))
  +			     ,(mvform-form (binding-mvform binding))))
  +		       let-bindings)))
   	    (t (make-let*)
   	       (setq body
   		     (list `(multiple-value-bind
  
positive.code:       ;; the tested conditions to its liking.
  
        ;; First pass: compute the arity of both branches
        (multiple-value-bind (else-form else-arg-types)
  	  (bst-compile-literal else-literal ())
  	(declare (ignore else-form))
  ;;(format t "~&;; else-form ~S is ~S --> ~S~%" else-literal else-arg-types else-res-types)
  	(multiple-value-bind (then-form then-arg-types)
  	    (bst-compile-literal then-literal ())
  	  (declare (ignore then-form))
  ;;(format t "~&;; then-form ~S is ~S --> ~S~%" then-literal then-arg-types then-res-types)
  	  ;; Now we know the arity of both branches.  We compute the
  	  ;; arg types and fill up the shorter arg list.
  	  (let ((arg-types ()))
  
negative.code:     function))
  
  (defun bst-compile-literal (literal stack &key (borrowing-allowed t))
    "Compile a BST function LITERAL, which is a symbol, designating a
  BST function, or a list (a function body).  Return five values: a Lisp
  FORM, ARGUMENT-TYPES, RESULT-TYPES, SIDE-EFFECTS-P, and FREE-VARIABLES."
    (let ((*form-stack* stack)
  