changeset 387: |
8252ee515756 |
parent: |
8fe057887c17
|
child: |
a36280d2ef4e |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Thu, 30 May 2024 18:31:53 -0400 |
permissions: |
-rw-r--r-- |
description: |
db and readtables |
1 ;;; std/mop.lisp --- Standard MOP Utilities 8 ;; make-specializer-form-using-class 9 ;; make-method-lambda-using-specializers 11 (defun list-indirect-class-methods (class) 12 "List all indirect methods of CLASS." 13 (remove-duplicates (mapcan #'specializer-direct-generic-functions (compute-class-precedence-list class)))) 15 (defun list-class-methods (class methods &optional indirect) 16 "List all methods specializing on CLASS modulo METHODS. When INDIRECT is 17 non-nil, also include indirect (parent) methods." 20 (list-indirect-class-methods class) 21 (specializer-direct-generic-functions class)) 24 (car (member s (specializer-direct-generic-functions class) :key #'generic-function-name))) 27 ;; FIX 2023-09-13: need exclude param 28 (defun list-class-slots (class slots &optional exclude) 29 ;; should probably convert slot-definition-name here 36 (string= (slot-definition-name s) x)) 38 (class-slots class)))) 44 with cn = (symb (slot-definition-name c)) 48 ;; TODO 2023-09-09: slot exclusion from dynamic var 49 (defun list-slot-values-using-class (class obj slots &optional nullp unboundp) 54 (let ((n (slot-definition-name s))) 55 (let ((ns (make-keyword (symbol-name n)))) 56 (if (slot-boundp-using-class class obj s) 57 (let ((v (slot-value-using-class class obj s))) 62 (when unboundp (list ns))))))