translate-variable checks if the symbol is unbound
authorDavid Vázquez <davazp@gmail.com>
Wed, 24 Apr 2013 18:40:15 +0000 (19:40 +0100)
committerDavid Vázquez <davazp@gmail.com>
Wed, 24 Apr 2013 18:40:15 +0000 (19:40 +0100)
ecmalisp.lisp

index 9fd5cba..a7f9f5c 100644 (file)
       (aset v i x)
       (incf i))))
 
+(defmacro awhen (condition &body body)
+  `(let ((it ,condition))
+     (when it ,@body)))
+
 #+ecmalisp
 (progn
   (defun values-list (list)
                 (incf index)))))
        ',name)))
 
+
+;;; Environment
+
 (def!struct binding
   name
   type
   (code "v" (incf *variable-counter*)))
 
 (defun translate-variable (symbol)
-  (binding-value (lookup-in-lexenv symbol *environment* 'variable)))
+  (awhen (lookup-in-lexenv symbol *environment* 'variable)
+    (binding-value it)))
 
 (defun extend-local-env (args)
   (let ((new (copy-lexenv *environment*)))