X-Git-Url: http://git.kpe.io/?p=clsql.git;a=blobdiff_plain;f=sql%2Fkmr-mop.lisp;h=f35528272204bdd94c4749ef483d69639a3795bd;hp=017aa0b2222cdc157cfd1ba391a51567211ee4e6;hb=HEAD;hpb=39e2802cd264ddacb3ca59b3b2c5c38f202149de diff --git a/sql/kmr-mop.lisp b/sql/kmr-mop.lisp index 017aa0b..f355282 100644 --- a/sql/kmr-mop.lisp +++ b/sql/kmr-mop.lisp @@ -66,19 +66,15 @@ #+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) @@ -86,6 +82,13 @@ 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