[Openmcl-devel] local special on symbol-macro

Tobias C. Rittweiler tcr at freebits.de
Thu Oct 22 09:58:42 UTC 2009


Tim Bradshaw <tfb at tfeb.org> writes:

> This also makes sense of the restriction for global symbol macros.   
> The only thing a non-binding-affecting SPECIAL declaration can do is  
> to let you see a special binding which is shadowed by an inner lexical  
> binding:
>
> (let ((x 1))
>    (declare (special x))
>    (let ((x 2))
>      (values x (locally (declare (special x))
>                  x))))
>
> But for DEFINE-SYMBOL-MACRO there can be no "outer" binding, so the  
> only thing a special declaration could apply to is the symbol macro,  
> and those are not allowed to be special.

I don't think it makes sense. For example, in the following

  (define-symbol-macro .foo. :global-symbol-macro)

  (defun foo ()
    (declare (special .foo.))
    .foo.)

  (let ((.foo. :special))
    (declare (special .foo.))
    (print (foo)))

you'd want your compiler to compile the reference to .FOO. in the
function FOO as a reference to a (yet unknown) special variable.

Albeit, following the standard, an implementation must signal an error
on discovering the special declaration of .FOO., though.

  -T.




More information about the Openmcl-devel mailing list