0.pre7.80:
[sbcl.git] / src / code / target-defstruct.lisp
index 803a61f..702abbc 100644 (file)
                       (,dd-ref-fun-name instance dsd-index)
                       ,instance-type-check-form))
                     ;; raw slot cases
-                    ,@(mapcar (lambda (raw-type-and-rawref-fun-name)
-                                (destructuring-bind (raw-type
-                                                     . rawref-fun-name)
-                                    raw-type-and-rawref-fun-name
+                    ,@(mapcar (lambda (rtd)
+                                (let ((raw-type (raw-slot-data-raw-type rtd))
+                                      (accessor-name
+                                       (raw-slot-data-accessor-name rtd))
+                                      (n-words (raw-slot-data-n-words rtd)))
                                   `((equal dsd-raw-type ',raw-type)
                                     #+sb-xc (/show0 "in raw slot case")
                                     (let ((raw-index (dd-raw-index dd)))
-                                      (%slotplace-accessor-funs
-                                       (,rawref-fun-name (,dd-ref-fun-name
+                                      (multiple-value-bind (scaled-dsd-index
+                                                            misalignment)
+                                          (floor dsd-index ,n-words)
+                                        (aver (zerop misalignment))
+                                        (%slotplace-accessor-funs
+                                         (,accessor-name (,dd-ref-fun-name
                                                           instance
                                                           raw-index)
-                                                         dsd-index)
-                                       ,instance-type-check-form)))))
-                              *raw-type->rawref-fun-name*)
+                                                         scaled-dsd-index)
+                                         ,instance-type-check-form))))))
+                              *raw-slot-data-list*)
                     ;; oops
                     (t
                      (error "internal error: unexpected DSD-RAW-TYPE ~S"