summaryrefslogtreecommitdiff
path: root/def.lisp
blob: 18fcd9ecf3c1ed780225b7d59fd6cc71061d949c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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)))