COMPILE regression in Apr 2010 snapshot (?)
Madhu
enometh at net.meer
Mon Apr 26 12:16:03 CEST 2010
* Raymond Toy <4BD508B2.4090006 at gmail.com> :
Wrote on Sun, 25 Apr 2010 23:29:54 -0400:
| 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.
My report may have been misleading: I do not think that macro is being
compiled again, it just looks that way from the notes that CMUCL prints.
I have not looked at the CMUCL code yet, but I my guess (without looking
at any commits) is that this is more likely related to some source
recording changes that may have been introduced.
--
Madhu
More information about the cmucl-imp
mailing list