[armedbear-devel] How do I release ABCL's "package-lock"?

Alessio Stalla alessiostalla at gmail.com
Wed Dec 30 11:47:06 UTC 2009

On Wed, Dec 30, 2009 at 7:18 AM, Peter Olsen <pcolsen at gmail.com> wrote:
> I'm writing to ask how to redefine the "or" macro in ABCL.
> I'm working on a project and there's one package in which I need "or" to
> mean something else than its usual definition.  I've tried simply to
> redefine it, but it doesn't work.  I understand that the Common Lisp spec
> requires special provision for that to be done --- such as the package-lock
> construct in SBCL.
> How can I do that in ABCL?  I want to be able to do this within the code,
> for example, with in a "let" so that I can bound its scope.
> Can anyone point me in the right direction?  My first --- failed ---
> experiment is below.

In addition to what Erik said, if you need you own OR to be effective
only in your package, you can use your-package:or instead of
common-lisp:or to name your macro, for example:

(defpackage :my-package
  (:use :common-lisp)
  (:shadow #:or)
  (:export ...))

then, start your source files with

(in-package :my-package)

and in one of them put

(defmacro or ...) ;the symbol is my-package:or, not common-lisp:or

Of course, this way your macro will only get used by your own code
(and code that imports the symbol OR from your package); it won't
affect other libraries or the system itself, so it's not equivalent to
Erik's advice.
This solution has the advantage of being portable Common Lisp.


More information about the armedbear-devel mailing list