anchor.diff:       (llvm:initialize-native-target)
        (setf llvm-inited t))))
   
  -(defun clutter-compile (func-name env &optional (output "binary"))
  -  "Write compiled code, which invokes clutter function named FUNC-NAME in ENV on execution, to OUTPUT."
  +(defun clutter-compile (form interp-env &optional (output "binary"))
  +  "Write compiled code to OUTPUT."
     (init-llvm)
     (setf *module* (llvm:make-module output))
     (setf *builder* (llvm:make-builder))
     (unwind-protect
  -       (let ((env (clone-env-tree env)))
  -         (compile-func (lookup func-name env) env)
  +       (let ((env (clone-env-tree interp-env)))
  +         (compile-form form env)
            (llvm:dump-module *module*)
            (unless (llvm:verify-module *module*)
              (llvm:write-bitcode-to-file *module* output)))
  
positive.code:     (llvm:position-builder-at-end *builder* continue-block)
      return-value))
  
  ;;; Arithmetic
  (defun build-arith-op (name initial func args)
    (reduce (rcurry (curry #'funcall func *builder*) name)
  
negative.code:   (build-arith-op "product" first #'llvm:build-s-div args))
  
  ;;; Arithmetic comparison
  (def-compiler-primfun "=?" (first &rest rest)
    (build-arith-op "equality" first
                    (lambda (b l r n) (llvm:build-i-cmp b := l r n))
                    rest))
  
  (defun compile-form (form env)
    (typecase form
      (integer (llvm:const-int (llvm:int32-type) form))
      (clutter-symbol (llvm:build-load *builder* (or (split-val-llvm (lookup form env)) (error "No binding for: ~A" form)) (clutter-symbol-name form)))
      (list
         (let ((cfunc (if (listp (car form))
                          (compile-form (car form) env)
                          (lookup (car form) env))))
           (if (compiler-prim? (split-val-clutter cfunc))
               (build-prim-call (split-val-clutter cfunc) (rest form) env)
               (progn
                 ;; Ensure that the function has been compiled.
  