anchor.diff:                              (symbol-value '+global-var-info+)
                               (make-hash-table :test #'eq)))
   
  +;; We really must implement this as a target lisp class.
   (defstruct (env (:constructor %make-env))
     vars
     tags
     blocks
  -  cenv) ;; cenv is environment for macros and constants
  +  cenv) ;; cenv is a `compiler environment'.
  +        ;; Macros and constants are evaluated in this environment.
  +       ; ; It holds macro/constant variable bindings.
   
   (defun make-env (&key parent vars tags blocks)
     (flet ((ct-vars (vars)
  
positive.code:       (error-not-symbol (second form)))
      (error-arg-count (rest form))))
  
  ;; we pass `nil' here because XI lexenv structure
  ;;  is not suitable for target lisp.
  ;; TODO: make lexenv a lisp object. 
  (defun eval-macroexpand (expander form)
    (let ((*dynamics* '()))
      (eval-call expander (list form nil))))
  
  ;; Microlisp set of special operators is very similiar to that
  ;;  of Common Lisp, so in case of XI we reuse existing CL control structures
  
negative.code:     (if (null var)
        (case (gethash symbol +global-var-info+)
          (:dynamic (get-symbol-value symbol))
          ((:static :constant) (sym-value symbol))
          (:macro (eval-form (sym-value symbol) env))
          (T (error-undeclared-variable symbol)))
        (ecase (second var)
          (:dynamic (get-symbol-value symbol))   
          (:macro (eval-form (cddr symbol) env))
          ((:static :constant) (cddr var))))))
  
  (defun %eval-setq (form env)
    (if (= (length form) 3)
      (if (symbol-object-p (second form))
        (let* ((symbol (second form))
  