diff options
Diffstat (limited to 'def.lisp')
| -rw-r--r-- | def.lisp | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/def.lisp b/def.lisp new file mode 100644 index 0000000..18fcd9e --- /dev/null +++ b/def.lisp @@ -0,0 +1,17 @@ +(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))) |
