Re: Lexical environment and compiler macro functions.

Mark Cox <[email protected]> Sun, 15 Mar 2015 17:31:40 +1000
Newsgroups gmane.lisp.cmucl.devel
Message-ID <[email protected]>
On 15/03/2015, at 4:16 PM, Mark Cox wrote:

> G'day,
> 
> CMUCL does not shadow the compiler macro function present in the
> global environment when introducing a function with the same name in
> the current lexical environment. This is demonstrated with the
> following example:
> 
>   (defun square (x)
>     (expt x 2))
> 
>   (define-compiler-macro square (&whole form arg)
>     (declare (ignore arg))
>     form)
> 
>   (defun test ()
>     (flet ((square (arg)
>              (declare (ignore arg))
>              (write "SQUARE!")))
>       (macrolet ((my-square (arg &environment env)
>                    (if (compiler-macro-function 'square env)
>                        `(function square)
>                        nil)))
>         (my-square 1))))
> 
>   (test)
>   => #<Function (FLET SQUARE TEST) {48704B89}>

Forget this. I have miscomprehended the definition of MACROLET in the
Hyperspec.

  The macro-expansion functions defined by macrolet are defined in the
  lexical environment in which the macrolet form appears. Declarations
  and macrolet and symbol-macrolet definitions affect the local macro
  definitions in a macrolet, but the consequences are undefined if the
  local macro definitions reference any local variable or function
  bindings that are visible in that lexical environment.

Sorry.
Mark
_______________________________________________
cmucl-imp mailing list
[email protected]
http://lists.zs64.net/mailman/listinfo/cmucl-imp