Fix typos in docstrings and function names.
[sbcl.git] / src / code / cas.lisp
index 17e4112..9c1c611 100644 (file)
@@ -8,7 +8,9 @@
 ;;;; DEFCAS, and #'(CAS ...) functions -- making things mostly isomorphic with
 ;;;; SETF.
 
-(defglobal **cas-expanders** (make-hash-table :test #'eq :synchronized t))
+(defglobal **cas-expanders** (make-hash-table :test #'eq
+                                              #-sb-xc-host #-sb-xc-host
+                                              :synchronized t))
 
 (define-function-name-syntax cas (list)
   (destructuring-bind (cas symbol) list
@@ -19,7 +21,7 @@
 (def!macro cas (place old new &environment env)
   "Synonym for COMPARE-AND-SWAP.
 
-Addtionally DEFUN, DEFGENERIC, DEFMETHOD, FLET, and LABELS can be also used to
+Additionally DEFUN, DEFGENERIC, DEFMETHOD, FLET, and LABELS can be also used to
 define CAS-functions analogously to SETF-functions:
 
   (defvar *foo* nil)
@@ -78,9 +80,9 @@ Example:
           ,new))))
 
 EXPERIMENTAL: Interface subject to change."
-  (flet ((invalid-place ()
-           (error "Invalid place to CAS: ~S" place)))
     (let ((expanded (sb!xc:macroexpand place environment)))
+      (flet ((invalid-place ()
+           (error "Invalid place to CAS: ~S -> ~S" place expanded)))
       (unless (consp expanded)
         ;; FIXME: Allow (CAS *FOO* <OLD> <NEW>), maybe?
         (invalid-place))
@@ -91,7 +93,7 @@ EXPERIMENTAL: Interface subject to change."
           (cond
             ;; CAS expander.
             (info
-             (funcall info place environment))
+             (funcall info expanded environment))
 
             ;; Structure accessor
             ((setf info (info :function :structure-accessor name))
@@ -205,7 +207,8 @@ EXPERIMENTAL: Interface subject to change."
 Two values are considered to match if they are EQ. Returns the previous value
 of PLACE: if the returned value is EQ to OLD, the swap was carried out.
 
-PLACE must be an accessor form whose CAR is one of the following:
+PLACE must be an CAS-able place. Built-in CAS-able places are accessor forms
+whose CAR is one of the following:
 
  CAR, CDR, FIRST, REST, SVREF, SYMBOL-PLIST, SYMBOL-VALUE, SVREF, SLOT-VALUE
  SB-MOP:STANDARD-INSTANCE-ACCESS, SB-MOP:FUNCALLABLE-STANDARD-INSTANCE-ACCESS,
@@ -216,13 +219,15 @@ other then FIXNUM or T.
 
 In case of SLOT-VALUE, if the slot is unbound, SLOT-UNBOUND is called unless
 OLD is EQ to SB-PCL:+SLOT-UNBOUND+ in which case SB-PCL:+SLOT-UNBOUND+ is
-returned and NEW is assigned to the slot.
-
-Additionally, the results are unspecified if there is an applicable method on
-either SB-MOP:SLOT-VALUE-USING-CLASS, (SETF SB-MOP:SLOT-VALUE-USING-CLASS), or
+returned and NEW is assigned to the slot. Additionally, the results are
+unspecified if there is an applicable method on either
+SB-MOP:SLOT-VALUE-USING-CLASS, (SETF SB-MOP:SLOT-VALUE-USING-CLASS), or
 SB-MOP:SLOT-BOUNDP-USING-CLASS.
 
-EXPERIMENTAL: Interface subject to change."
+Additionally, the PLACE can be a anything for which a CAS-expansion has been
+specified using DEFCAS, DEFINE-CAS-EXPANDER, or for which a CAS-function has
+been defined. (See SB-EXT:CAS for more information.)
+"
   `(cas ,place ,old ,new))
 
 ;;; Out-of-line definitions for various primitive cas functions.