[cmucl-imp] COMPILE regression in Apr 2010 snapshot (?)
Raymond Toy
toy.raymond at gmail.com
Mon Apr 26 05:29:54 CEST 2010
On 4/24/10 3:42 AM, Madhu wrote:
> Helu, here is an unpolished test case to show the problem:
>
> -=-=-
> (defmacro frob-keyvals-string (string)
> (with-input-from-string (stream string)
> `(progn ,@(loop for key = (let ((x (read stream nil stream)))
> (if (eq x stream) (loop-finish) x))
> for val = (read stream)
> for comment = (read stream)
> collect (list 'defvar key (list 'quote val)
> (string comment))))))
>
> (frob-keyvals-string "
> foo fooval foocomment
> bar barval barcomment
> car carval carcomment")
>
This is caused by the macro expansion of defvar when the localization
support was added. Previously, we had
(macroexpand '(defvar abc nil "abc")) ->
(PROGN
(DECLAIM (SPECIAL ABC))
(UNLESS (BOUNDP 'ABC)
(SETQ ABC NIL))
(SETF (DOCUMENTATION 'ABC 'VARIABLE) '"abc")
(LISP::SET-DEFVAR-SOURCE-LOCATION 'ABC (C::SOURCE-LOCATION))
'ABC)
We now have:
(PROGN
(DECLAIM (SPECIAL ABC))
(UNLESS (BOUNDP 'ABC)
(SETQ ABC NIL))
(SETF (DOCUMENTATION 'ABC 'VARIABLE) '"abc")
(EVAL-WHEN (:LOAD-TOPLEVEL :EXECUTE)
(SETF (INFO VARIABLE INTL:TEXTDOMAIN 'ABC) NIL))
(LISP::SET-DEFVAR-SOURCE-LOCATION 'ABC (C::SOURCE-LOCATION))
'ABC)
I do not understand it, but that (setf info) causes the problem. When
that is removed, cmucl behaves as it used to. I don't understand why
that would cause the macro to be compiled again.
Ray
More information about the cmucl-imp
mailing list