Changeset 14294 for branches/1.1.x/src/org/armedbear/lisp/clos.lisp
- Timestamp:
- 12/06/12 07:06:36 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/1.1.x/src/org/armedbear/lisp/clos.lisp
r14290 r14294 866 866 ; canonicalized-slot)) 867 867 868 (defun canonicalize-direct-superclass-list (class direct-superclasses) 869 (cond (direct-superclasses) 870 ((subtypep (class-of class) +the-funcallable-standard-class+) 871 (list +the-funcallable-standard-object-class+)) 872 ((subtypep (class-of class) +the-standard-class+) 873 (list +the-standard-object-class+)))) 874 868 875 (defun std-after-initialization-for-classes (class 869 876 &key direct-superclasses direct-slots 870 877 direct-default-initargs 871 878 &allow-other-keys) 872 (let ((supers (cond (direct-superclasses) 873 ((subtypep (class-of class) 874 +the-funcallable-standard-class+) 875 (list +the-funcallable-standard-object-class+)) 876 ((subtypep (class-of class) +the-standard-class+) 877 (list +the-standard-object-class+))))) 879 (let ((supers (canonicalize-direct-superclass-list class direct-superclasses))) 878 880 (setf (class-direct-superclasses class) supers) 879 881 (dolist (superclass supers) … … 3782 3784 (std-shared-initialize instance slot-names initargs)) 3783 3785 3784 (defmethod shared-initialize :after ((instance standard-class) slot-names3785 &key direct-superclasses3786 direct-slots direct-default-initargs3787 &allow-other-keys)3788 (std-after-initialization-for-classes3789 instance :direct-superclasses direct-superclasses3790 :direct-slots direct-slots3791 :direct-default-initargs direct-default-initargs))3792 3793 (defmethod shared-initialize :after ((instance funcallable-standard-class)3794 slot-names &key direct-superclasses3795 direct-slots direct-default-initargs3796 &allow-other-keys)3797 (std-after-initialization-for-classes3798 instance :direct-superclasses direct-superclasses3799 :direct-slots direct-slots3800 :direct-default-initargs direct-default-initargs))3801 3802 3786 (defmethod shared-initialize ((slot slot-definition) slot-names 3803 3787 &rest args … … 3935 3919 (add-direct-subclass superclass class))) 3936 3920 3937 (defmethod reinitialize-instance :after ((class standard-class) &rest all-keys) 3921 (defun std-after-reinitialization-for-classes (class 3922 &rest all-keys 3923 &key (direct-superclasses nil direct-superclasses-p) 3924 (direct-slots nil direct-slots-p) 3925 (direct-default-initargs nil direct-default-initargs-p) 3926 &allow-other-keys) 3938 3927 (remhash class *make-instance-initargs-cache*) 3939 3928 (remhash class *reinitialize-instance-initargs-cache*) 3940 3929 (%make-instances-obsolete class) 3941 3930 (setf (class-finalized-p class) nil) 3942 ;; KLUDGE (rudi 2012-06-17) this calls add-direct-subclass again 3943 (apply #'std-after-initialization-for-classes class all-keys) 3931 (when direct-superclasses-p 3932 (let* ((old-supers (class-direct-superclasses class)) 3933 (new-supers (canonicalize-direct-superclass-list 3934 class direct-superclasses))) 3935 (setf (class-direct-superclasses class) new-supers) 3936 (dolist (old-superclass (set-difference old-supers new-supers)) 3937 (remove-direct-subclass old-superclass class)) 3938 (dolist (new-superclass (set-difference new-supers old-supers)) 3939 (add-direct-subclass new-superclass class)))) 3940 (when direct-slots-p 3941 ;; FIXME: maybe remove old reader and writer methods? 3942 (let ((slots (mapcar #'(lambda (slot-properties) 3943 (apply #'make-direct-slot-definition class slot-properties)) 3944 direct-slots))) 3945 (setf (class-direct-slots class) slots) 3946 (dolist (direct-slot slots) 3947 (dolist (reader (slot-definition-readers direct-slot)) 3948 (add-reader-method class reader direct-slot)) 3949 (dolist (writer (slot-definition-writers direct-slot)) 3950 (add-writer-method class writer direct-slot))))) 3951 (when direct-default-initargs-p 3952 (setf (class-direct-default-initargs class) direct-default-initargs)) 3953 (maybe-finalize-class-subtree class) 3944 3954 (map-dependents class #'(lambda (dep) (update-dependent class dep all-keys)))) 3955 3956 (defmethod reinitialize-instance :after ((class standard-class) 3957 &rest all-keys) 3958 (apply #'std-after-reinitialization-for-classes class all-keys)) 3945 3959 3946 3960 (defmethod reinitialize-instance :after ((class funcallable-standard-class) 3947 3961 &rest all-keys) 3948 (remhash class *make-instance-initargs-cache*) 3949 (remhash class *reinitialize-instance-initargs-cache*) 3950 (%make-instances-obsolete class) 3951 (setf (class-finalized-p class) nil) 3952 ;; KLUDGE (rudi 2012-06-17) this calls add-direct-subclass again 3953 (apply #'std-after-initialization-for-classes class all-keys) 3954 (map-dependents class #'(lambda (dep) (update-dependent class dep all-keys)))) 3962 (apply #'std-after-reinitialization-for-classes class all-keys)) 3955 3963 3956 3964 (defmethod reinitialize-instance :after ((gf standard-generic-function)
Note: See TracChangeset
for help on using the changeset viewer.