Advertisement
Guest User

Untitled

a guest
Jan 8th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.61 KB | None | 0 0
  1. (require :closer-mop)
  2.  
  3. (defclass metainfo-aware-class
  4.     (closer-mop:standard-class)
  5.   ())
  6.  
  7. (defclass metaslot
  8.     (closer-mop:standard-slot-definition)
  9.   ((metainfo :initform nil
  10.          :initarg :metainfo)))
  11.  
  12. (defclass direct-metaslot
  13.     (closer-mop:standard-direct-slot-definition metaslot)
  14.   ())
  15.  
  16. (defclass effective-metaslot
  17.     (closer-mop:standard-effective-slot-definition metaslot)
  18.   ())
  19.  
  20. (defmethod closer-mop:validate-superclass
  21.     ((class metainfo-aware-class)
  22.      (superclass closer-mop:standard-class))
  23.   t)
  24.  
  25.  
  26. (defmethod slot-definition-metainfo
  27.     ((slot closer-mop:standard-slot-definition))
  28.   nil)
  29.  
  30. (defmethod (setf slot-definition-metainfo)
  31.     (new-value (slot closer-mop:standard-slot-definition))
  32.   nil)
  33.  
  34. (defmethod slot-definition-metainfo
  35.     ((slot metaslot))
  36.   (slot-value slot 'metainfo))
  37.  
  38. (defmethod (setf slot-definition-metainfo)
  39.     (new-value (slot metaslot))
  40.   (setf (slot-value slot 'metainfo) new-value))
  41.  
  42. (defmethod closer-mop:direct-slot-definition-class
  43.     ((class metainfo-aware-class) &rest initargs)
  44.   (find-class 'direct-metaslot))
  45.  
  46. (defmethod closer-mop:effective-slot-definition-class
  47.     ((class metainfo-aware-class) &rest initargs)
  48.   (find-class 'effective-metaslot))
  49.  
  50. (defmethod closer-mop:compute-effective-slot-definition
  51.     ((class metainfo-aware-class)
  52.      name
  53.      direct-slot-definitions)
  54.   (let ((effective-slotd (call-next-method)))
  55.     (dolist (slotd direct-slot-definitions)
  56.       (when (typep slotd 'metaslot)
  57.     (setf (slot-value effective-slotd 'metainfo)
  58.           (slot-value slotd 'metainfo))
  59.     (return)))
  60.     effective-slotd))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement