From: Nikodemus S. <de...@us...> - 2007-09-27 15:50:49
|
Update of /cvsroot/sbcl/sbcl/src/code In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv13668/src/code Modified Files: macroexpand.lisp Log Message: 1.0.10.9: symbol-macro expansion uses *MACROEXPAND-HOOK* Thanks to Tobias Rittweiler. Index: macroexpand.lisp =================================================================== RCS file: /cvsroot/sbcl/sbcl/src/code/macroexpand.lisp,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- macroexpand.lisp 7 Oct 2005 04:57:09 -0000 1.9 +++ macroexpand.lisp 27 Sep 2007 15:50:44 -0000 1.10 @@ -53,17 +53,25 @@ t) (values form nil)))) ((symbolp form) - (let* ((venv (when env (sb!c::lexenv-vars env))) - (local-def (cdr (assoc form venv)))) - (cond ((and (consp local-def) - (eq (car local-def) 'macro)) - (values (cdr local-def) t)) - (local-def - (values form nil)) - ((eq (info :variable :kind form) :macro) - (values (info :variable :macro-expansion form) t)) - (t - (values form nil))))) + (flet ((perform-symbol-expansion (symbol expansion) + ;; CLHS 3.1.2.1.1 specifies that symbol-macros are expanded + ;; via the macroexpand hook, too. + (funcall sb!xc:*macroexpand-hook* + (constantly expansion) + symbol + env))) + (let* ((venv (when env (sb!c::lexenv-vars env))) + (local-def (cdr (assoc form venv)))) + (cond ((and (consp local-def) + (eq (car local-def) 'macro)) + (values (perform-symbol-expansion form (cdr local-def)) t)) + (local-def + (values form nil)) + ((eq (info :variable :kind form) :macro) + (let ((expansion (info :variable :macro-expansion form))) + (values (perform-symbol-expansion form expansion) t))) + (t + (values form nil)))))) (t (values form nil)))) |