X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fdefmacro.lisp;h=adb9d35df179c82bbf6e2d51c81b60b422f5329a;hb=86210c4e406c1b2ff10cc3bac0e71435867db48b;hp=eac1da59ef74ff12580643d76263cb4f252ea74f;hpb=ce02ab2ecd9c6ae2e570abd8c93ebf3be55bbdad;p=sbcl.git diff --git a/src/code/defmacro.lisp b/src/code/defmacro.lisp index eac1da5..adb9d35 100644 --- a/src/code/defmacro.lisp +++ b/src/code/defmacro.lisp @@ -35,22 +35,23 @@ ;;; still useful in the target interpreter, and in the ;;; cross-compilation host. (defun sb!c::%defmacro (name definition lambda-list doc) - (try-to-rename-interpreted-function-as-macro definition name lambda-list) + (declare (ignore lambda-list)) (sb!c::%%defmacro name definition doc)) ;;; (called by SB!C::%DEFMACRO) (eval-when (:compile-toplevel :load-toplevel :execute) (defun sb!c::%%defmacro (name definition doc) - ;; Old note (ca. 1985, maybe:-): "Eventually %%DEFMACRO should deal with - ;; clearing old compiler information for the functional value." + ;; old note (ca. 1985, maybe:-): "Eventually %%DEFMACRO should + ;; deal with clearing old compiler information for the functional + ;; value." (clear-info :function :where-from name) ;; FIXME: It would be nice to warn about DEFMACRO of an ;; already-defined macro, but that's slightly hard to do because ;; in common usage DEFMACRO is defined at compile time and then ;; redefined at load time. We'd need to make a distinction between ;; the defined-at-compile-time state and the defined-at-load-time - ;; state to make this work. (Trying to warn about duplicate DEFTYPEs - ;; runs into the same problem.) + ;; state to make this work. (Trying to warn about duplicate + ;; DEFTYPEs runs into the same problem.) #+nil (when (sb!xc:macro-function name) (style-warn "redefining ~S in DEFMACRO" name)) (setf (sb!xc:macro-function name) definition @@ -78,22 +79,20 @@ ;;; 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 +;;; FIXME: It'd probably be good (especially for DEFMACRO) +;;; to make this share more code with DEFMACRO. (def!macro defmacro-mundanely (name lambda-list &body body) - `(progn - (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) + (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))))) - ',name)) + ,new-body))) + (setf (fdocumentation ',name 'macro) + ,doc) + ',name))))