summaryrefslogtreecommitdiff
path: root/def.lisp
diff options
context:
space:
mode:
Diffstat (limited to 'def.lisp')
-rw-r--r--def.lisp17
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)))