Automated commit for debian release 6.7.2-1
[clsql.git] / sql / kmr-mop.lisp
index 017aa0b2222cdc157cfd1ba391a51567211ee4e6..f35528272204bdd94c4749ef483d69639a3795bd 100644 (file)
   #+mop-slot-order-reversed (reverse (class-direct-slots class))
   #-mop-slot-order-reversed (class-direct-slots class))
 
-(defun find-slot-by-name (class slot-name &optional direct? recurse?)
+(defun find-slot-if (class predicate &optional direct? recurse?)
   "Looks up a direct-slot-definition by name"
-  (setf class (to-class class)
-        slot-name (to-slot-name slot-name))
+  (setf class (to-class class))
   (labels ((find-it (class)
              (let* ((slots (if direct?
                                (ordered-class-direct-slots class)
                                (ordered-class-slots class)))
-                    (it (find slot-name
-                              slots
-                              :key #'slot-definition-name)))
-               (if it
-                   it
+                    (it (find-if predicate slots)))
+               (or it
                    (when recurse?
                      (loop for sup in (class-direct-superclasses class)
                            for rtn = (find-it sup)
                            finally (return rtn)))))))
     (find-it class)))
 
+(defun find-slot-by-name (class slot-name &optional direct? recurse?)
+  "Looks up a direct-slot-definition by name"
+  (setf class (to-class class)
+        slot-name (to-slot-name slot-name))
+  (find-slot-if class (lambda (slot-def) (eql (to-slot-name slot-def) slot-name))
+                direct? recurse?))
+
 ;; Lispworks has symbol for slot rather than the slot instance
 (defun %svuc-slot-name (slot)
   #+lispworks slot