15 Sep 2009 19:08
Re: [PATCH] make defpackage form fully describe package's state
Tobias C. Rittweiler <tcr <at> freebits.de>
2009-09-15 17:08:13 GMT
2009-09-15 17:08:13 GMT
Uhm, for some reason that escapes me, the diff below came in reversed. You have to apply it by passing the -R flag to patch. -T. "Tobias C. Rittweiler" <...> writes: > CLHS specifies that consequences are undefined if a defpackage form (on > evaluation) does not fully describe the package's state. And, indeed, > SBCL signals a warning in that case. > > That means that (progn (asdf:oos 'asdf:load-op :closer-mop :force t) > (asdf:oos 'asdf:load-op :closer-mop :force t)) > will fail on SBCL. > > The attached patch makes the effort to generate a DEFPACKAGE form which > correctly describes the final state of the package it defines. > > -T. > > > --- old-closer-mop/closer-mop-utility-packages.lisp 2009-09-15 17:58:23.000000000 +0200 > +++ new-closer-mop/closer-mop-utility-packages.lisp 2009-09-15 17:58:23.000000000 +0200 > <at> <at> -1,22 +1,17 <at> <at> > (in-package :cl-user) > > -;;; We have to make sure that the DEFPACKAGE form fully describes the > -;;; state of the package as CLHS specifies the consequences to be > -;;; undefined otherwise. And SBCL annoyingly^W rightfully signals > -;;; a warning in the case of reloading. > -(macrolet > - ((define-closer-cl-package (name &body options) > - `(defpackage ,name > - , <at> options > - (:export , <at> (loop for sym being the external-symbols of :common-lisp > - if (find-symbol (symbol-name sym) :c2mop) > - collect it > - else collect sym)) > - (:export , <at> (loop for sym being the external-symbols of :c2mop > - collect sym))))) > - > - (define-closer-cl-package #:closer-common-lisp > - (:nicknames #:c2cl))) > +(defpackage #:closer-common-lisp > + (:nicknames #:c2cl) > + (:use)) > + > +(let ((syms (nunion (loop for sym being the external-symbols of :common-lisp > + if (find-symbol (symbol-name sym) :c2mop) > + collect it > + else collect sym) > + (loop for sym being the external-symbols of :c2mop > + collect sym)))) > + (import syms :c2cl) > + (export syms :c2cl)) > > (defpackage #:closer-common-lisp-user > (:nicknames #:c2cl-user)
RSS Feed