0.8.15.6:
[sbcl.git] / src / pcl / low.lisp
index 34537ac..ea468f4 100644 (file)
 (defun intern-fun-name (name)
   (cond ((symbolp name) name)
        ((listp name)
-        (intern (let ((*package* *pcl-package*)
-                      (*print-case* :upcase)
-                      (*print-pretty* nil)
-                      (*print-gensym* t))
-                  (format nil "~S" name))
-                *pcl-package*))))
+        (let ((*package* *pcl-package*)
+              (*print-case* :upcase)
+              (*print-pretty* nil)
+              (*print-gensym* t))
+          (format-symbol *pcl-package* "~S" name)))))
+
 \f
 ;;; FIXME: probably no longer needed after init
 (defmacro precompile-random-code-segments (&optional system)
 (defun structure-slotd-reader-function (slotd)
   (fdefinition (dsd-accessor-name slotd)))
 
-(defun structure-slotd-writer-function (slotd)
-  (unless (dsd-read-only slotd)
-    (fdefinition `(setf ,(dsd-accessor-name slotd)))))
+(defun structure-slotd-writer-function (type slotd)
+  (if (dsd-read-only slotd)
+      (let ((dd (get-structure-dd type)))
+       (coerce (slot-setter-lambda-form dd slotd) 'function))
+      (fdefinition `(setf ,(dsd-accessor-name slotd)))))
 
 (defun structure-slotd-type (slotd)
   (dsd-type slotd))