(let ((layout (classoid-layout (find-classoid name))))
(dolist (code codes)
(setf (svref res code) layout)))))))
+ (setq *null-classoid-layout*
+ (locally
+ (declare (notinline find-classoid))
+ (classoid-layout (find-classoid 'null))))
#-sb-xc-host (/show0 "done setting *BUILT-IN-CLASS-CODES*"))
\f
(!defun-from-collected-cold-init-forms !classes-cold-init)
;;; a vector that maps type codes to layouts, used for quickly finding
;;; the layouts of built-in classes
(defvar *built-in-class-codes*) ; initialized in cold load
+(defvar *null-classoid-layout*)
(declaim (type simple-vector *built-in-class-codes*))
;; Note: was #.((CLASS-LAYOUT (SB!XC:FIND-CLASS 'NULL))).
;; I (WHN 19990209) replaced this with an expression evaluated at
;; run time in order to make it easier to build the cross-compiler.
- ;; If it doesn't work, something else will be needed..
- (locally
- ;; KLUDGE: In order to really make this run at run time
- ;; (instead of doing some weird broken thing at cold load
- ;; time), we need to suppress a DEFTRANSFORM.. -- WHN 19991004
- (declare (notinline find-classoid))
- (classoid-layout (find-classoid 'null))))
+ ;;
+ ;; KLUDGE: Since there's a DEFTRANSFORM for FIND-CLASSOID on
+ ;; constant names which creates non-cold-loadable code, we
+ ;; can't just use (CLASSOID-LAYOUT (FIND-CLASSOID 'NULL))
+ ;; here. The original (WHN 19991004) solution was to locally
+ ;; notinline FIND-CLASSOID. However, the full call to
+ ;; FIND-CLASSOID caused suboptimal register allocation in PCL
+ ;; dfuns. So instead we now use a special variable which is
+ ;; initialized during cold init. -- JES, 2006-07-04
+ *null-classoid-layout*)
(t (svref *built-in-class-codes* (widetag-of x)))))
#!-sb-fluid (declaim (inline classoid-of))
;;; checkins which aren't released. (And occasionally for internal
;;; versions, especially for internal versions off the main CVS
;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".)
-"0.9.14.17"
+"0.9.14.18"