anchor.diff:  	   (locals (set-make))
   	   (arglist (mapcar #'->sym (third form)))
   	   (name (and (second form) (->sym (second form)))))
  -      (declare (special locals environments toplevel))
  -      (let* ((lexenv-chain (cons (list name arglist locals) lexenv-chain))
  -	     (placeholder (copy-list lexenv-chain)))
  -	(push placeholder environments)
  +      (declare (special locals environments lexenv-chain toplevel))
  +      (with-new-lexical-environment (env (list name arglist locals))
   	(let ((new-form (lift-defuns (transform-tree (fourth form)))))
   	  (list (js-intern (first form))
  -		placeholder
  +		env
   		name
   		arglist
   		(set-elems locals)
  
positive.code: 	(->sym (third form))))
  
  (define-transform-rule (:with form)
    (let* ((lexenv-chain (cons :obj lexenv-chain))
  	 (placeholder (copy-list lexenv-chain)))
      (push placeholder environments)
      (list (js-intern (car form))
  	  placeholder
  	  (transform-tree (second form))
  	  (transform-tree (third form)))))
  
  
negative.code: (in-package :js)
  ;;
  (defmacro with-new-lexical-environment ((var new-env) &body body)
    `(let* ((lexenv-chain (cons ,new-env lexenv-chain))
  	  (,var (copy-list lexenv-chain)))
       (declare (special lexenv-chain)) ; ... later
       (progn (push ,var environments) ,@body)))
  
  (defun transform-tree (form)
    (cond ((null form) nil)
  	((atom form)
  