Ignore:
Timestamp:
01/14/12 20:07:00 (11 years ago)
Author:
rschlatte
Message:

Support for funcallable instances.

... Move execute, set-funcallable-instance-function upwards from

StandardGenericFunction? to new class FuncallableStandardObject?.

... Add various MOPpy methods for funcallable-standard-class, which

isn't a subclass of standard-class, unfortunately.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abcl/src/org/armedbear/lisp/clos.lisp

    r13774 r13775  
    686686    (std-finalize-inheritance class))
    687687  (sys::%std-allocate-instance class))
     688
     689(defun allocate-funcallable-instance (class)
     690  (unless (class-finalized-p class)
     691    (std-finalize-inheritance class))
     692  (sys::%allocate-funcallable-instance class))
    688693
    689694(defun make-instance-standard-class (metaclass
     
    26512656(defmethod slot-value-using-class ((class standard-class) instance slot-name)
    26522657  (std-slot-value instance slot-name))
    2653 
     2658(defmethod slot-value-using-class ((class funcallable-standard-class)
     2659                                   instance slot-name)
     2660  (std-slot-value instance slot-name))
    26542661(defmethod slot-value-using-class ((class structure-class) instance slot-name)
    26552662  (std-slot-value instance slot-name))
     
    26642671
    26652672(defmethod (setf slot-value-using-class) (new-value
     2673                                          (class funcallable-standard-class)
     2674                                          instance
     2675                                          slot-name)
     2676  (setf (std-slot-value instance slot-name) new-value))
     2677
     2678(defmethod (setf slot-value-using-class) (new-value
    26662679                                          (class structure-class)
    26672680                                          instance
     
    26752688
    26762689(defmethod slot-exists-p-using-class ((class standard-class) instance slot-name)
     2690  (std-slot-exists-p instance slot-name))
     2691(defmethod slot-exists-p-using-class ((class funcallable-standard-class) instance slot-name)
    26772692  (std-slot-exists-p instance slot-name))
    26782693
     
    26862701(defmethod slot-boundp-using-class ((class standard-class) instance slot-name)
    26872702  (std-slot-boundp instance slot-name))
     2703(defmethod slot-boundp-using-class ((class funcallable-standard-class) instance slot-name)
     2704  (std-slot-boundp instance slot-name))
    26882705(defmethod slot-boundp-using-class ((class structure-class) instance slot-name)
    26892706  "Structure slots can't be unbound, so this method always returns T."
     
    26932710(defgeneric slot-makunbound-using-class (class instance slot-name))
    26942711(defmethod slot-makunbound-using-class ((class standard-class)
     2712                                        instance
     2713                                        slot-name)
     2714  (std-slot-makunbound instance slot-name))
     2715(defmethod slot-makunbound-using-class ((class funcallable-standard-class)
    26952716                                        instance
    26962717                                        slot-name)
     
    27202741  (declare (ignore initargs))
    27212742  (std-allocate-instance class))
     2743
     2744(defmethod allocate-instance ((class funcallable-standard-class) &rest initargs)
     2745  (declare (ignore initargs))
     2746  (allocate-funcallable-instance class))
    27222747
    27232748(defmethod allocate-instance ((class structure-class) &rest initargs)
     
    28122837(defgeneric make-instance (class &rest initargs &key &allow-other-keys))
    28132838
    2814 (defmethod make-instance ((class standard-class) &rest initargs)
     2839(defmethod make-instance ((class class) &rest initargs)
    28152840  (when (oddp (length initargs))
    28162841    (error 'program-error :format-control "Odd number of keyword arguments."))
     
    28282853        (setf initargs (append initargs default-initargs)))))
    28292854
    2830   (let ((instance (std-allocate-instance class)))
     2855  (let ((instance (allocate-instance class)))
    28312856    (check-initargs (list #'allocate-instance #'initialize-instance)
    28322857                    (list* instance initargs)
     
    29562981(defmethod make-instances-obsolete ((class standard-class))
    29572982  (%make-instances-obsolete class))
    2958 
     2983(defmethod make-instances-obsolete ((class funcallable-standard-class))
     2984  (%make-instances-obsolete class))
    29592985(defmethod make-instances-obsolete ((class symbol))
    29602986  (make-instances-obsolete (find-class class))
     
    29883014  (apply #'std-after-initialization-for-classes class args))
    29893015
     3016(defmethod initialize-instance :after ((class funcallable-standard-class)
     3017                                       &rest args)
     3018  (apply #'std-after-initialization-for-classes class args))
     3019
    29903020(defmethod reinitialize-instance :after ((class standard-class) &rest all-keys)
    29913021  (remhash class *make-instance-initargs-cache*)
     
    30133043(defmethod compute-class-precedence-list ((class standard-class))
    30143044  (std-compute-class-precedence-list class))
     3045(defmethod compute-class-precedence-list ((class funcallable-standard-class))
     3046  (std-compute-class-precedence-list class))
    30153047
    30163048;;; Slot inheritance
     
    30263058  ((class standard-class) name direct-slots)
    30273059  (std-compute-effective-slot-definition class name direct-slots))
    3028 
     3060(defmethod compute-effective-slot-definition
     3061  ((class funcallable-standard-class) name direct-slots)
     3062  (std-compute-effective-slot-definition class name direct-slots))
    30293063;;; Methods having to do with generic function metaobjects.
    30303064
     
    33143348  (allocate-instance class))
    33153349
     3350(defmethod class-prototype ((class funcallable-standard-class))
     3351  (allocate-instance class))
     3352
    33163353(defmethod class-prototype ((class structure-class))
    33173354  (allocate-instance class))
Note: See TracChangeset for help on using the changeset viewer.