git.fiddlerwoaroof.com
utils.lisp
ef3b7ddb
 (in-package  :fwoar.rss-reader.utils)
 
 (defmacro defclass+ (name (&rest super) &body (direct-slots &rest options))
   (let ((initargs (append (mapcan (lambda (class)
                                     (typecase class
                                       (cons (cadr class))
                                       (t nil)))
                                   super)
                           (mapcan (lambda (slot)
                                     (alexandria:ensure-list
                                      (alexandria:when-let ((initarg (getf (cdr slot)
                                                                           :initarg)))
                                        (make-symbol (symbol-name initarg)))))
                                   direct-slots))))
6131cd63
     `(progn (defclass ,name
                 ,(mapcar (lambda (it)
                            (typecase it
                              (cons (car it))
                              (t it)))
                   super)
ef3b7ddb
               ,direct-slots
               ,@options)
             (defun ,name (,@initargs)
               (fw.lu:new ',name ,@initargs)))))