From: Peter G. <pe...@ar...> - 2006-06-12 12:42:06
|
On Fri, 9 Jun 2006 at 22:45:33 -0400, Alan Ruttenberg wrote: > I hadn't realized that you were going to include the workaround in > the source, so I assumed that I would need to be able to redefine the > functions. > > But your committing them makes life easier. Thanks. > > BTW, I missed something in the undefined variables patch > > (unless (or (special-variable-p (variable-name variable)) <-- > (member (variable-name variable) *undefined-variables*)) > > To catch the globally declared specials, like defvars. I've committed this. However, there's still a problem: CL-USER(1): (defun foo () (declare (special *x*)) *x*) FOO CL-USER(2): (compile 'foo) ; Caught STYLE-WARNING: ; Undefined variable: *X* ; Compilation unit finished ; Caught 1 STYLE-WARNING condition FOO T NIL The problem here is that the compiler doesn't fully process special declarations until pass 2, and your code for issuing warnings about undeclared variables is being executed in pass 1. I believe the proper fix for this is to move special declaration processing entirely into pass 1, but that's more work than I have time to do right now. -Peter |