anchor.diff:      (vm-scope? x)					(expex-move-arg-vm-scope ex x)
   	(expex-move-arg-std ex x)))
   
  -;; 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)
  +(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
   
  
positive.code: ;; Recurses into LAMBDA-expressions and VM-SCOPEs.
  ;; Removes VM-SCOPEs.
  (defun expex-expr (ex expr)
    (let x (expex-guest-filter-expr ex expr)
      (if
  	  (%var? x)
  	    (expex-var x)
        (not (expex-able? ex x))
  	    (values nil (list x))
  	  (or (lambda? x)
  		  (named-function-expr? x))
  	    (expex-lambda ex x)
        (vm-scope? x)
  	    (values nil (expex-body ex (vm-scope-body x)))
        (%setq? x)
  
negative.code:   (if (or (atom x)
  		  (%setq? x)
  		  (vm-jump? x)
  		  (%var? x)
  		  (named-function-expr? x))
  	  x
  	  (expex-guest-filter-setter ex `(%setq ~%ret ,(if (identity? x)
  													   (second x)
  