- (let ((inst-var (gensym "INST"))
- (class-name (symbolicate code '-inst))
- (constructor-name (symbolicate 'make- code '-inst))
- (keys (mapcar (lambda (arg) (intern (symbol-name arg) :keyword))
- args)))
+ (let* ((inst-var (gensym "INST"))
+ (class-name (symbolicate code '-inst))
+ (constructor-name (symbolicate 'make- code '-inst))
+ (slots (mapcan (lambda (arg)
+ (if (listp arg) (list (car arg))
+ (let ((name (symbol-name arg)))
+ (if (and (plusp (length name))
+ (char/= (char name 0) #\&))
+ (list arg)
+ nil))))
+ args))
+ (keys (mapcar (lambda (arg) (intern (symbol-name arg) :keyword))
+ slots)))