0.8.8.30:
[sbcl.git] / src / code / macroexpand.lisp
index 8f467e5..36ab43c 100644 (file)
@@ -15,7 +15,7 @@
 
 (defun sb!xc:special-operator-p (symbol)
   #!+sb-doc
-  "If the symbol globally names a special form, returns T, otherwise NIL."
+  "If the symbol globally names a special form, return T, otherwise NIL."
   (declare (symbol symbol))
   (eq (info :function :kind symbol) :special-form))
 
   whenever a runtime expansion is needed. Initially this is set to
   FUNCALL.")
 
-(declaim (ftype (function (t &optional (or null sb!c::lexenv))) sb!xc:macroexpand-1))
 (defun sb!xc:macroexpand-1 (form &optional env)
   #!+sb-doc
-  "If form is a macro (or symbol macro), expands it once. Returns two values,
+  "If form is a macro (or symbol macro), expand it once. Return two values,
    the expanded form and a T-or-NIL flag indicating whether the form was, in
-   fact, a macro. Env is the lexical environment to expand in, which defaults
+   fact, a macro. ENV is the lexical environment to expand in, which defaults
    to the null environment."
   (cond ((and (consp form) (symbolp (car form)))
         (let ((def (sb!xc:macro-function (car form) env)))
                       t)
               (values form nil))))
        ((symbolp form)
-        (let* ((venv (when env (sb!c::lexenv-variables env)))
+        (let* ((venv (when env (sb!c::lexenv-vars env)))
                (local-def (cdr (assoc form venv))))
-          (if (and (consp local-def)
-                   (eq (car local-def) 'macro))
-              (values (cdr local-def) t)
-              (values form nil))))
+          (cond ((and (consp local-def)
+                      (eq (car local-def) 'macro))
+                 (values (cdr local-def) t))
+                ((eq (info :variable :kind form) :macro)
+                 (values (info :variable :macro-expansion form) t))
+                (t
+                 (values form nil)))))
        (t
         (values form nil))))
 
-(declaim (ftype (function (t &optional (or null sb!c::lexenv))) sb!xc:macroexpand))
 (defun sb!xc:macroexpand (form &optional env)
   #!+sb-doc
   "Repetitively call MACROEXPAND-1 until the form can no longer be expanded.