(in-package #:def) (defmacro defclass (name parents &body simple-slots) (let (slots) (dolist (slot simple-slots) (if (symbolp slot) (push `(,slot :initarg ,(intern (symbol-name slot) 'keyword) :accessor ,slot) slots) (let ((slot-name (first slot)) (slot-type (second slot)) (slot-form (third slot))) (cond ((and slot-type slot-form) (push `(,slot-name :initarg ,(intern (symbol-name slot-name) 'keyword) :accessor ,slot-name :type ,slot-type :initform ,slot-form) slots)) (slot-type (push `(,slot-name :initarg ,(intern (symbol-name slot-name) 'keyword) :accessor ,slot-name :type ,slot-type) slots)) (t (push `(,slot-name :initarg ,(intern (symbol-name slot-name) 'keyword) :accessor ,slot-name) slots)))))) `(cl:defclass ,name ,parents ,slots)))