(in-package "SB!IMPL")
-(file-comment
- "$Header$")
-
;;; the guts of the DEFMACRO macro, pulled out into a separate
;;; function in order to make it easier to express the common
;;; bootstrap idiom
;;; 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
;;; 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))))