[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