anchor.diff:                           env)))))
   
   (defspecial block (&environment env name &body body)
  -  (let ((env (cons (list :block name (lambda (values)
  -                                       (return-from block (values-list values))))
  -                   env)))
  +  (let ((env (sys.c::extend-environment
  +              env
  +              :blocks (list (list name (lambda (values)
  +                                         (return-from block (values-list values))))))))
       (eval-progn-body body env)))
   
   (defspecial return-from (&environment env name &optional value)
  -  (dolist (e env (error "No block named ~S." name))
  -    (when (and (eql (first e) :block)
  -               (eql (second e) name))
  -      (funcall (third e) (multiple-value-list (eval-in-lexenv value env))))))
  +  (let ((target (or (sys.c::lookup-block-in-environment name env)
  +                    (error "No block named ~S." name))))
  +    (funcall target (multiple-value-list (eval-in-lexenv value env)))))
   
   (defspecial eval-when (&environment env situation &body body)
     (multiple-value-bind (compile load eval)
  
positive.code: 
  (defun find-variable (symbol env)
    "Locate SYMBOL in ENV. Returns a binding list or the symbol if there was no lexical binding."
    (dolist (e env symbol)
      (when (and (eql (first e) :symbol-macros)
                 (assoc symbol (rest e)))
        (return (list :symbol-macro (second (assoc symbol (rest e))))))
      (when (and (eql (first e) :special) (member symbol (rest e)))
        (return symbol))
      (when (and (eql (first e) :binding) (eql (second e) symbol))
        (return e))))
  
  (defun find-function (name env)
    (dolist (e env (restart-case (fdefinition name)
                     (use-value (v)
                       :interactive (lambda ()
                                      (format t "Enter a new value (evaluated): ")
  
negative.code:   (multiple-value-bind (body declares)
        (sys.int::parse-declares body)
      (eval-locally-body declares body
                         (sys.int::make-macrolet-env definitions env))))
  
  (defspecial symbol-macrolet (&environment env definitions &body body)
    (multiple-value-bind (body declares)
        (sys.int::parse-declares body)
      (eval-locally-body declares body
                         (sys.int::make-symbol-macrolet-env definitions env))))
  
  (defspecial tagbody (&environment env &body body)
    (let ((current body))
      (tagbody
         (setf env (sys.c::extend-environment
                    env
                    :go-tags (loop for sublist on body
                                  when (typep (first sublist) '(or symbol integer))
                                  collect (list (first sublist)
                                                (let ((place sublist))
                                                  (lambda () (setf current place) (go loop)))))))
       loop
         (cond
           ((null current)
  