Changeset 616 for trunk/ccl/level-1/l1-clos.lisp
- Timestamp:
- Mar 3, 2004, 11:27:12 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/ccl/level-1/l1-clos.lisp
r421 r616 422 422 (update-class class t)) 423 423 424 425 (defmethod finalize-inheritance ((class forward-referenced-class)) 426 (error "Class ~s can't be finalized." class)) 427 424 428 (defmethod class-primary-p ((class std-class)) 425 429 (%class-primary-p class)) … … 482 486 (sort-list slotds '< #'slotd-position))))) 483 487 484 (defun class-has-a-forward-referenced-superclass-p (class) 485 (or (forward-referenced-class-p class) 486 (some #'class-has-a-forward-referenced-superclass-p 487 (%class-direct-superclasses class)))) 488 489 488 490 489 491 (defun update-cpl (class cpl) … … 495 497 496 498 499 (defun class-has-a-forward-referenced-superclass-p (class) 500 (or (if (forward-referenced-class-p class) class) 501 (dolist (s (%class-direct-superclasses class)) 502 (let* ((fwdref (class-has-a-forward-referenced-superclass-p s))) 503 (when fwdref (return fwdref)))))) 504 505 506 (defmethod compute-class-precedence-list ((class class)) 507 (let* ((fwdref (class-has-a-forward-referenced-superclass-p class))) 508 (when fwdref 509 (error "~&Class ~s can't be finalized because at least one of its superclasses (~s) is a FORWARD-REFERENCED-CLASS." class fwdref))) 510 (compute-cpl class)) 511 512 ;;; Classes that can't be instantiated via MAKE-INSTANCE have no 513 ;;; initargs caches. 514 (defmethod %flush-initargs-caches ((class class)) 515 ) 516 517 ;;; Classes that have initargs caches should flush them when the 518 ;;; class is finalized. 519 (defmethod %flush-initargs-caches ((class std-class)) 520 (setf (%class.make-instance-initargs class) nil 521 (%class.reinit-initargs class) nil 522 (%class.redefined-initargs class) nil 523 (%class.changed-initargs class) nil)) 497 524 498 525 (defun update-class (class finalizep) … … 512 539 (class-finalized-p class) 513 540 (not (class-has-a-forward-referenced-superclass-p class))) 514 (update-cpl class (compute-c plclass))541 (update-cpl class (compute-class-precedence-list class)) 515 542 ;;; This -should- be made to work for structure classes 516 543 (update-slots class (compute-slots class)) 517 544 (setf (%class-default-initargs class) (compute-default-initargs class)) 545 (%flush-initargs-caches class) 518 546 ) 519 547 (unless finalizep … … 1421 1449 (apply #'update-dependent class d initargs)))) 1422 1450 1423 (defmethod finalize-inheritance ((fwc forward-referenced-class))1424 (error "~s can't be finalized." fwc))1425 1451 1426 1452 (defun %allocate-gf-instance (class)
Note: See TracChangeset
for help on using the changeset viewer.