(unless (symbolp name)
(error "The constant name is not a symbol: ~S" name))
(when (looks-like-name-of-special-var-p name)
- (style-warn "defining ~S as a constant, even though the name follows~@
-the usual naming convention (names like *FOO*) for special variables"
- name))
+ (style-warn 'sb!kernel:asterisks-around-constant-variable-name
+ :format-control "defining ~S as a constant"
+ :format-arguments (list name)))
(sb!c:with-source-location (source-location)
(setf (info :source-location :constant name) source-location))
(let ((kind (info :variable :kind name)))
(if (boundp name)
(if (typep name '(or boolean keyword))
;; Non-continuable error.
- (about-to-modify-symbol-value name "define ~S as a constant")
+ (about-to-modify-symbol-value name 'defconstant)
(let ((old (symbol-value name)))
(unless (eql value old)
(multiple-value-bind (ignore aborted)
(when aborted
(return-from sb!c::%defconstant name))))))
(warn "redefining a MAKUNBOUND constant: ~S" name)))
- (:global
+ (:unknown
;; (This is OK -- undefined variables are of this kind. So we
;; don't warn or error or anything, just fall through.)
)
;; doubt such warnings are ANSI-compliant, but I'm not sure, so I've
;; written this in a way that CMU CL will tolerate and which ought to
;; work elsewhere too.) -- WHN 2001-03-24
- (eval `(defconstant ,name ',value))))
+ (eval `(defconstant ,name ',value)))
+ ;; It would certainly be awesome if this was only needed for symbols
+ ;; in CL. Unfortunately, that is not the case. Maybe some are moved
+ ;; back in CL later on?
+ (setf (info :variable :xc-constant-value name) value))
(setf (info :variable :kind name) :constant)
name)