anchor.diff:    (if (or (atom x)
   		  (%setq? x)
   		  (vm-jump? x)
  -		  (%var? x))
  +		  (%var? x)
  +		  (named-function-expr? x))
   	  x
   	  (expex-guest-filter-setter ex `(%setq ~%ret ,(if (identity? x)
   													   (second x)
  
positive.code: ;; Check if an expression has a return value.
  (defun expex-returnable? (ex x)
    (not (or (vm-jump? x)
  		   (%var? x))))
  
  ;; Check if arguments to a function should be expanded.
  (defun expex-expandable-args? (ex fun argdef)
  
negative.code:     (vm-scope? x)					(expex-move-arg-vm-scope ex x)
  	(expex-move-arg-std ex x)))
  
  (defun expex-move-slot-value (ex x)
    (with ((moved new-expr)
  			 (assoc-splice (mapcar (fn expex-move-arg ex _)
  				        		   (expex-guest-filter-arguments ex (list .x.)))))
      (values (apply #'append moved)
  			`(%slot-value ,new-expr. ,..x.))))
  
  (defun expex-move-args-0 (ex x)
    (with ((moved new-expr)
  			 (assoc-splice (mapcar (fn expex-move-arg ex _)
  				        		   (expex-guest-filter-arguments ex x))))
      (values (apply #'append moved)
  			new-expr)))
  
  ;; Move subexpressions out of a parent.
  ;;
  ;; Returns the head of moved expressions and a new parent with
  ;; replaced arguments.
  (defun expex-move-args (ex x)
    (if (%slot-value? x)
  	  (expex-move-slot-value ex x)
  	  (expex-move-args-0 ex x)))
  
  ;;;; EXPRESSION EXPANSION
  
  