[Openmcl-cvs-notifications] r10730 - /trunk/source/lib/macros.lisp

gz at clozure.com gz at clozure.com
Sun Sep 14 13:57:44 EDT 2008


Author: gz
Date: Sun Sep 14 13:57:44 2008
New Revision: 10730

Log:
Make atomic-incf-decf handle let/let*/locally, needed so it can handle %svr=
ef (and hence def-accessors)

Modified:
    trunk/source/lib/macros.lisp

Modified: trunk/source/lib/macros.lisp
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- trunk/source/lib/macros.lisp (original)
+++ trunk/source/lib/macros.lisp Sun Sep 14 13:57:44 2008
@@ -3162,9 +3162,19 @@
               sym (car place)))
       (ecase sym
 	(the `(the ,(cadr place) (atomic-incf-decf ,(caddr place) ,delta)))
+         ;; Needed so can handle %svref (which macroexpands into a LET*)
+         ((let let*) (multiple-value-bind (body decls) (parse-body (cddr p=
lace) env t)
+                       (unless (eql (length body) 1)
+                         (error "~S is not a valid atomic-incf/decf place"=
 place))
+                       `(,sym ,(cadr place) , at decls (atomic-incf-decf , at bo=
dy ,delta))))
+         ;; Ditto
+         (locally (multiple-value-bind (body decls) (parse-body (cdr place=
) env t)
+                    (unless (eql (length body) 1)
+                      (error "~S is not a valid atomic-incf/decf place" pl=
ace))
+                    `(,sym , at decls (atomic-incf-decf , at body ,delta))))
 	(car `(%atomic-incf-car ,(cadr place) ,delta))
 	(cdr `(%atomic-incf-cdr ,(cadr place) ,delta))
-	((svref %svref) `(%atomic-incf-gvector ,@(cdr place) ,delta))))
+	(svref `(%atomic-incf-gvector ,@(cdr place) ,delta))))
     (if (and (symbolp place) (eq :special (variable-information place env)=
))
       (let* ((base (gensym))
              (offset (gensym)))



More information about the Openmcl-cvs-notifications mailing list