+(define-compilation car (x)
+ (concat "(" (ls-compile x env fenv) ").car"))
+
+(define-compilation cdr (x)
+ (concat "(" (ls-compile x env fenv) ").cdr"))
+
+(defmacro with-eval-when-compilation (&body body)
+ `(setq *eval-when-compilations*
+ (concat *eval-when-compilations* (progn ,@body))))
+
+(defun %compile-defvar (name)
+ (push (make-var-binding name) *env*)
+ (with-eval-when-compilation
+ (format nil "var ~a" (lookup-variable name *env*))))
+
+(defun %compile-defun (name)
+ (push (make-func-binding name) *fenv*)
+ (with-eval-when-compilation
+ (format nil "var ~a" (lookup-variable name *fenv*))))
+
+(defun %compile-defmacro (name lambda)
+ (push (cons name (cons 'macro lambda)) *fenv*))