X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=src%2Fcode%2Fmacros.lisp;h=d4731bb79d3b52d1c17cc1dd4021cba0107630ae;hb=c8af15e61b030c8d4b0e950bc9b7618530044618;hp=8fb91253ab236ab3ac94a53893372338bcdbddf4;hpb=b1de52969f584c63d43fb35da4a8a6a4e0e619f0;p=sbcl.git diff --git a/src/code/macros.lisp b/src/code/macros.lisp index 8fb9125..d4731bb 100644 --- a/src/code/macros.lisp +++ b/src/code/macros.lisp @@ -28,7 +28,7 @@ #!+sb-doc "Signals an error if the value of test-form is nil. Continuing from this error using the CONTINUE restart will allow the user to alter the value of - some locations known to SETF, starting over with test-form. Returns nil." + some locations known to SETF, starting over with test-form. Returns NIL." `(do () (,test-form) (assert-error ',test-form ',places ,datum ,@arguments) ,@(mapcar #'(lambda (place) @@ -92,35 +92,30 @@ (defmacro-mundanely defconstant (name value &optional documentation) #!+sb-doc - "For defining global constants. The DEFCONSTANT says that the value - is constant and may be compiled into code. If the variable already has + "For defining global constants. DEFCONSTANT says that the value is + constant and may be compiled into code. If the variable already has a value, and this is not EQL to the init, the code is not portable (undefined behavior). The third argument is an optional documentation string for the variable." `(eval-when (:compile-toplevel :load-toplevel :execute) (sb!c::%defconstant ',name ,value ',documentation))) -;;; (to avoid "undefined function" warnings when cross-compiling) -(sb!xc:proclaim '(ftype function sb!c::%defconstant)) - ;;; the guts of DEFCONSTANT (defun sb!c::%defconstant (name value doc) - (/show "doing %DEFCONSTANT" name value doc) (unless (symbolp name) (error "constant name not a symbol: ~S" name)) (about-to-modify name) (let ((kind (info :variable :kind name))) (case kind (:constant - ;; Note 1: This behavior (discouraging any non-EQL - ;; modification) is unpopular, but it is specified by ANSI - ;; (i.e. ANSI says a non-EQL change has undefined - ;; consequences). If people really want bindings which are - ;; constant in some sense other than EQL, I suggest either just - ;; using DEFVAR (which is usually appropriate, despite the - ;; un-mnemonic name), or defining something like - ;; SB-INT:DEFCONSTANT-EQX (which is occasionally more - ;; appropriate). -- WHN 2000-11-03 + ;; Note: This behavior (discouraging any non-EQL modification) + ;; is unpopular, but it is specified by ANSI (i.e. ANSI says a + ;; non-EQL change has undefined consequences). If people really + ;; want bindings which are constant in some sense other than + ;; EQL, I suggest either just using DEFVAR (which is usually + ;; appropriate, despite the un-mnemonic name), or defining + ;; something like SB-INT:DEFCONSTANT-EQX (which is occasionally + ;; more appropriate). -- WHN 2000-11-03 (unless (eql value (info :variable :constant-value name)) (cerror "Go ahead and change the value." @@ -162,7 +157,7 @@ (defun sb!c::%define-compiler-macro (name definition lambda-list doc) ;; FIXME: Why does this have to be an interpreted function? Shouldn't ;; it get compiled? - (assert (sb!eval:interpreted-function-p definition)) + (aver (sb!eval:interpreted-function-p definition)) (setf (sb!eval:interpreted-function-name definition) (format nil "DEFINE-COMPILER-MACRO ~S" name)) (setf (sb!eval:interpreted-function-arglist definition) lambda-list) @@ -259,7 +254,7 @@ (cond ,@(nreverse clauses) ,@(if errorp - `((t (error 'sb!conditions::case-failure + `((t (error 'case-failure :name ',name :datum ,keyform-value :expected-type ',expected-type