From: <ger...@t-...> - 2003-08-03 19:05:32
|
Christophe Rhodes <cs...@ca...> writes: > So, your starter for 10 is: why has cmucl not transformed away this > call to %instance-typep? OK, I have a test case now, from some debugging by intuition, since it was too hot today for serious debugging :). It's something like (defvar *var*) (declaim (type foo *var*)) (defstruct foo) (defun bar () (let ((*var* (baz))) (baz))) The type of *VAR* in the global environment, i.e. (INFO VARIABLE KIND ...), is an UNKNOWN-TYPE. The TYPEP source transform translates to %INSTANCE-TYPEP according to FOO's structure type. The deftransform for %INSTANCE-TYPEP isn't taken, which is probably caused in some way by the UNKNOWN-TYPE that is involved. I haven't investigated that yet. As a test, when I reparse UNKNOWN-TYPEs in FIND-FREE-VARIABLE, SBCL builds with current CMUCL. Do you perhaps remember where this is handled in SBCL? AFAICS, it keeps the UNKNOWN-TYPEs in the info database just like CMUCL, and it doesn't do anything in FIND-FREE-VAR either. (And, have I won a coffee mug? :) |