src/optparse.lisp, src/classes.lisp: Don't leak slot names.
[sod] / doc / list-exports.lisp
index 65514d4..00bb7af 100755 (executable)
     (and export
         (list* (symbolicate code '-inst)
                (symbolicate 'make- code '-inst)
-               (mapcar (lambda (arg)
-                         (symbolicate 'inst- arg))
+               (mapcan (lambda (arg)
+                         (let ((sym (if (listp arg) (car arg) arg)))
+                           (cond ((char= (char (symbol-name sym) 0) #\&)
+                                  nil)
+                                 (t
+                                  (list (symbolicate 'inst- sym))))))
                        args)))))
 
 (defmethod form-list-exports ((head (eql 'sod::define-tagged-type)) tail)
          (symbolicate 'c- kind '-type)
          (symbolicate 'make- kind '-type))))
 
+(defmethod form-list-exports ((head (eql 'sod:defctype)) tail)
+  (destructuring-bind (names value &key export) tail
+    (declare (ignore value))
+    (let ((names (if (listp names) names (list names))))
+      (and export
+          (list* (symbolicate 'c-type- (car names)) names)))))
+
+(defmethod form-list-exports ((head (eql 'sod:define-simple-c-type)) tail)
+  (destructuring-bind (names type &key export) tail
+    (declare (ignore type))
+    (let ((names (if (listp names) names (list names))))
+      (and export
+          (list* (symbolicate 'c-type- (car names)) names)))))
+
 (defmethod form-list-exports ((head (eql 'cl:macrolet)) tail)
   (mapcan #'form-exports (cdr tail)))
 
                                       (class-direct-slots class)))
                              (exported (remove-if
                                         (lambda (sym)
-                                          (and (not (exported-symbol-p sym))
-                                               (eq (symbol-package sym)
-                                                   package)))
+                                          (or (not (symbol-package sym))
+                                              (and (not (exported-symbol-p
+                                                         sym))
+                                                   (eq (symbol-package sym)
+                                                       package))))
                                         slot-names)))
                         (and exported
                              (list (cons (class-name class)