X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdefmacro.lisp;h=ea41418a5184e2e1ba297a93ba4c9c806bb3b614;hb=ea36d3d79b9dfe3598faca5e267efd5980b94d4a;hp=9ec1d2b25ef1cf8781de2db52767f492b2e8be18;hpb=cea4896b2482b7b2b429c1631d774b4cfbc0efba;p=sbcl.git diff --git a/src/code/defmacro.lisp b/src/code/defmacro.lisp index 9ec1d2b..ea41418 100644 --- a/src/code/defmacro.lisp +++ b/src/code/defmacro.lisp @@ -77,21 +77,18 @@ ;;; DEFMACRO-MUNDANELY is like SB!XC:DEFMACRO, except that it doesn't ;;; have any EVAL-WHEN or IR1 magic associated with it, so it only ;;; takes effect in :LOAD-TOPLEVEL or :EXECUTE situations. -;;; -;;; KLUDGE: Currently this is only used for various special -;;; circumstances in bootstrapping, but it seems to me that it might -;;; be a good basis for reimplementation of DEFMACRO in terms of -;;; EVAL-WHEN, which might be easier to understand than the current -;;; approach based on IR1 magic. -- WHN 19990811 (def!macro defmacro-mundanely (name lambda-list &body body) - `(setf (sb!xc:macro-function ',name) - ,(let ((whole (gensym "WHOLE-")) - (environment (gensym "ENVIRONMENT-"))) - (multiple-value-bind (new-body local-decs doc) - (parse-defmacro lambda-list whole body name 'defmacro - :environment environment) - (declare (ignore doc)) - `(lambda (,whole ,environment) - ,@local-decs - (block ,name - ,new-body)))))) + (let ((whole (gensym "WHOLE-")) + (environment (gensym "ENVIRONMENT-"))) + (multiple-value-bind (new-body local-decs doc) + (parse-defmacro lambda-list whole body name 'defmacro + :environment environment) + `(progn + (setf (sb!xc:macro-function ',name) + (lambda (,whole ,environment) + ,@local-decs + (block ,name + ,new-body))) + (setf (fdocumentation ',name 'macro) + ,doc) + ',name))))