From: Sam S. <sd...@gn...> - 2004-05-11 21:17:09
|
> * Bruno Haible <oe...@py...t> [2004-05-11 22:26:46 +0200]: > > Sam wrote: >> From the compilation POV, no, the compiled code may depend on many >> factors, including global proclamations and the compilation status of >> other parts of the system. This is actually part of the raison d'etre >> for WITH-COMPILATION-UNIT. > > In the small example, WITH-COMPILATION-UNIT was not used. > > The bug is that the compiler made assumptions about a function from > file1 while compiling file2. It must not do this, according to CLHS > 3.2.2.3: > > "The definition of a function that is defined and declared inline in the > compilation environment must be the same at run time." > > "A call within a file to a named function that is defined in the same > file refers to that function, unless that function has been declared > notinline. The consequences are unspecified if functions are redefined > individually at run time or multiply defined in the same file." > > Since the function from file1 was neither defined in the same > compilation-unit as file2, nor declared inline, the compiler must not > assume any details about it that could change if I re-defun the > function after loading file2.fas. > > So you can save the seclass of a function for compiling other > functions in the same compilation unit, or if the function was > declared inline. But not in this case. in that case we cannot fold (= 0 0) because this fas file might be loaded by lisp.run with a redefined #'=. -- Sam Steingold (http://www.podval.org/~sds) running w2k <http://www.camera.org> <http://www.iris.org.il> <http://www.memri.org/> <http://www.mideasttruth.com/> <http://www.honestreporting.com> Lisp: it's here to save your butt. |