Changeset 5377


Ignore:
Timestamp:
Oct 18, 2006, 6:38:57 AM (18 years ago)
Author:
Gary Byers
Message:

The post-bootstrapping version of (SETF FIND-CLASS) only introduces (or removes) a type
name if the class becomes (or ceases to be) a properly named class.

The pre-bootstrapping version handles simpler cases of that; use ALIAS-CLASS to
register some early class names as type names.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/ccl/level-1/l1-clos-boot.lisp

    r5267 r5377  
    11401140
    11411141(defun (setf info-type-kind) (val name)
    1142   (setf (gethash name *type-kind-info*) val))
     1142  (if val
     1143    (setf (gethash name *type-kind-info*) val)
     1144    (remhash name *type-kind-info*)))
    11431145
    11441146(defun missing-type-method (&rest foo)
     
    12161218  (let ((cell (find-class-cell name class)))
    12171219    (when cell
    1218       (setf (info-type-kind name) :instance)
     1220      (if (eq name (%class.name class))
     1221        (setf (info-type-kind name) :instance))
    12191222      (setf (cdr (the cons cell)) class))
    12201223    class))
     
    12531256
    12541257(queue-fixup
    1255  (without-interrupts
    1256   (defun set-find-class (name class)
    1257     (setq name (require-type name 'symbol))
    1258     (let ((cell (find-class-cell name class)))
    1259       (declare (type list cell))
    1260       (when *warn-if-redefine-kernel*
    1261         (let ((old-class (cdr cell)))
    1262           (when old-class
    1263             (check-setf-find-class-protected-class old-class class name))))
    1264       (when (null class)
    1265         (when cell
    1266           (setf (cdr cell) nil))
    1267         (return-from set-find-class nil))
    1268       (setq class (require-type class 'class))
    1269       (when (built-in-type-p name)
    1270         (unless (eq (cdr cell) class)
    1271           (error "Cannot redefine built-in type name ~S" name)))
    1272       (when (%deftype-expander name)
    1273         (cerror "set ~S anyway, removing the ~*~S definition"
    1274                 "Cannot set ~S because type ~S is already defined by ~S"
    1275                 `(find-class ',name) name 'deftype)
    1276         (%deftype name nil nil))
    1277       (setf (info-type-kind name) :instance)
    1278       (setf (cdr cell) class)))
    1279   ) ; end of without-interrupts
    1280  ) ; end of queue-fixup
     1258 (defun set-find-class (name class)
     1259   (setq name (require-type name 'symbol))
     1260   (let ((cell (find-class-cell name class)))
     1261     (declare (type list cell))
     1262       (let ((old-class (cdr cell)))
     1263         (when old-class
     1264           (when (eq (%class.name old-class) name)
     1265             (setf (info-type-kind name) nil)
     1266             (clear-type-cache))
     1267           (when *warn-if-redefine-kernel*
     1268             (check-setf-find-class-protected-class old-class class name))))
     1269     (when (null class)
     1270       (when cell
     1271         (setf (cdr cell) nil))
     1272       (return-from set-find-class nil))
     1273     (setq class (require-type class 'class))
     1274     (when (built-in-type-p name)
     1275       (unless (eq (cdr cell) class)
     1276         (error "Cannot redefine built-in type name ~S" name)))
     1277     (when (eq (%class.name class) name)
     1278       (when (%deftype-expander name)
     1279         (cerror "set ~S anyway, removing the ~*~S definition"
     1280                 "Cannot set ~S because type ~S is already defined by ~S"
     1281                 `(find-class ',name) name 'deftype)
     1282         (%deftype name nil nil))
     1283       (setf (info-type-kind name) :instance))
     1284     (setf (cdr cell) class)))
     1285 )                                      ; end of queue-fixup
    12811286
    12821287
     
    15101515(defglobal *function-class* (make-built-in-class 'function))
    15111516
     1517(defun alias-class (name class)
     1518  (setf (find-class name) class
     1519        (info-type-kind name) :instance)
     1520  class)
     1521
    15121522;;;Right now, all functions are compiled.
    15131523
    15141524
    15151525(defglobal *compiled-function-class* *function-class*)
    1516 (setf (find-class 'compiled-function) *compiled-function-class*)
     1526(alias-class 'compiled-function *compiled-function-class*)
    15171527
    15181528(defglobal *compiled-lexical-closure-class*
     
    16551665  (defglobal *double-float-class* (make-built-in-class 'double-float (find-class 'float)))
    16561666  (defglobal *single-float-class*  (make-built-in-class 'single-float (find-class 'float)))
    1657   (setf (find-class 'short-float) *single-float-class*)
    1658   (setf (find-class 'long-float) *double-float-class*)
     1667  (alias-class 'short-float *single-float-class*)
     1668  (alias-class 'long-float *double-float-class*)
    16591669
    16601670  (make-built-in-class 'rational (find-class 'real))
     
    16741684  (make-built-in-class 'logical-pathname (find-class 'pathname))
    16751685 
    1676   (defglobal *base-char-class* (setf (find-class 'base-char) *character-class*))
     1686  (defglobal *base-char-class* (alias-class 'base-char *character-class*))
    16771687  (defglobal *standard-char-class* (make-built-in-class 'standard-char *base-char-class*))
    16781688 
    1679   #+who-needs-extended-char
    1680   (make-built-in-class 'extended-char *character-class*)
    1681 
    16821689  (defglobal *keyword-class* (make-built-in-class 'keyword *symbol-class*))
    16831690 
     
    17031710    (make-built-in-class 'double-float-vector *vector-class*)
    17041711    (make-built-in-class 'short-float-vector *vector-class*)
    1705     (setf (find-class 'long-float-vector) (find-class 'double-float-vector))
    1706     (setf (find-class 'single-float-vector) (find-class 'short-float-vector))
     1712    (alias-class 'long-float-vector (find-class 'double-float-vector))
     1713    (alias-class 'single-float-vector (find-class 'short-float-vector))
    17071714    (make-built-in-class 'simple-double-float-vector (find-class 'double-float-vector) (find-class 'simple-1d-array))
    17081715    (make-built-in-class 'simple-short-float-vector (find-class 'short-float-vector) (find-class 'simple-1d-array))
    1709     (setf (find-class 'simple-long-float-vector) (find-class 'simple-double-float-vector))
    1710     (setf (find-class 'simple-single-float-vector) (find-class 'simple-short-float-vector))
     1716    (alias-class 'simple-long-float-vector (find-class 'simple-double-float-vector))
     1717    (alias-class 'simple-single-float-vector (find-class 'simple-short-float-vector))
    17111718    )
    17121719
Note: See TracChangeset for help on using the changeset viewer.