Skip to content

Commit

Permalink
Implement the EXPORT keyword for DEFPACKAGE (jscl-project#288)
Browse files Browse the repository at this point in the history
Note that the MAKE-PACKAGE function purposely does not support that
keyword.

See http://clhs.lisp.se/Body/f_mk_pkg.htm
  • Loading branch information
foretspaisibles committed Oct 17, 2017
1 parent 7a6d817 commit f8c6abe
Showing 1 changed file with 17 additions and 4 deletions.
21 changes: 17 additions & 4 deletions src/package.lisp
Original file line number Diff line number Diff line change
Expand Up @@ -93,17 +93,30 @@
`(eval-when (:compile-toplevel :load-toplevel :execute)
(setq *package* (find-package-or-fail ',string-designator))))

(defmacro defpackage (package &rest options)
(let (use)

(defmacro defpackage (name &rest options)
(let (exports use)
(dolist (option options)
(ecase (car option)
(:export
(setf exports (append exports (cdr option))))
(:use
(setf use (append use (cdr option))))))
`(progn
(eval-when (:load-toplevel :execute)
(%defpackage ',(string package) ',use))
(let ((package (%defpackage ',(string name) ',use)))
(export
(mapcar (lambda (symbol)(intern (symbol-name symbol) package)) ',exports)
package)
package))
(eval-when (:compile-toplevel)
(make-package ',(string package) :use ',use)))))
(let ((package
(or (find-package ,name)
(make-package ',(string name) :use ',use))))
(export
(mapcar (lambda (symbol)(intern (symbol-name symbol) package)) ',exports)
package)
package)))))


(defun %redefine-package (package use)
Expand Down

0 comments on commit f8c6abe

Please sign in to comment.