Pointless microoptimizations 'R' us: ... in (defun foo (x) (declare (optimize speed) (type (signed-byte 32) x)) (logand x #xffffffff)) on the x86, there is no need to perform the hardware AND, as we are not interested in the flags. Make it so. (The system already automatically handles the representation such that X and the result can live in the same register -- to see this, wrap the LOGAND above as (ASH (LOGAND ...) -3) and disassemble.
Slightly less arbitrary default for *MAX-EMF-PRECOMPUTE-METHODS*. ... it appears that there is no need for an upper limit, so the only natural value is no limit at all; ... retain the tunability of the parameter, even though there probably ought to be a better MOPpish way of expressing it; ... awaiting with interest the effect this has on benchmarks; it has no observable effect on e.g. McCLIM window mappping times. (what /does/ have an effect there is compiling and loading a file with (SB-PCL::PRECOMPUTE-RANDOM-CODE-SEGMENTS) in it).
More floating point reader fixes for non-10 *READ-BASE* ... confusion arises if the exponent marker is also a digit. Fix the manifest confusions; ... also a long-standing floating point reader-bugfix: reading "ae+9" with *READ-BASE* = 11 used to give a BUG; ... fix the tests, too.
Merge patches from NJF (sbcl-devel 2003-03-11) ... more #!-SB-DOC ... fewer :TEST-NOT ... less OAOOM Explain what's happening around MAYBE-FP-WAIT (thanks to Nikodemus Siivola sbcl-devel) Patch threads.impure.lisp to allow writing the C file (Nikodemus Siivola sbcl-devel 2004-02-27) Fix for foreign double access on Darwin (CSR sbcl-devel 2004-02-23)
More SB-POSIX test fixes ... allow building as root again, since it seems that's a desired feature ... test for not having EUID of 0 in EACCES posix tests instead (this will probably annoy antifuchs, but I forgot to commit version.lisp-expr for the last fix. Since this is logically a simple continuation, I haven't bothered to increment it again)
Don't allow the system to be built as root ... id(1) check early in the build. Fix the SB-POSIX test suite ... rewrite mkdir.error.3 not to assume that / is unwriteable; ... continue to assume that the user is not (fake)root, but nonetheless try to clean up a bit more if we are.
Better %SXHASH-SUBSTRING (patch Juho Snellman sbcl-devel 2004-03-09) ... frob comments a little ... make the same FLET workaround in %SXHASH-SIMPLE-SUBSTRING ... probably fasl-incompatible with 0.8.8.22, but I've already changed the fasl version number once this cycle. Let's see if anyone complains :) ... 20% faster at compiling mk-defsystem on DB's iMac (MORE SPEED!)
Make unknown variables signal a compile-time warning. ... slightly hacky (if (eq kind :variable) ...) in the warning logic itself; ... rearrange bits of the build to eliminate technically undefined forward references; ... fix for multiple *CURRENT-CATCH-BLOCK* and *CURRENT-UNWIND-PROTECT-BLOCK*: we now have one and only one of each variable, rather than three
hacked TRACE :PRINT code so that it does TERPRI as well as FRESH-LINE (which is perhaps less elegant than doing only one or the other, but seems to be more robust than the previous FRESH-LINE-only solution) fixed overlooked merge conflict in NEWS (pointed out by Neil Schemenauer)
MORE MICRO-OPTIMIZATION ... renumber all widetags. (LESS BINARY-COMPATIBILITY) ... implement some smarter type tag checking on the x86. The smarter type checking comes in several flavours. * If we have two adjacent lowtags, in three cases out of four we can do "and, cmp, branch", rather than "cmp, branch, cmp, branch"; * If we have two lowtags that are unadjacent but differ by just one bit, we can likewise do "and, cmp, branch" rather than "cmp, branch, cmp, branch"; * If we have a contiguous range of lowtags that includes the most positive lowtag, we do not need to test the upper bound; * If we have four lowtags with only two bits different, we can do "and, cmp, branch" rather than *four* "cmp, branch" pairs. This change will conflict with ongoing 64-bit ports. The conflict is resolvable (there are enough widetags in the "array" range (which in practice is 130 - 254; currently there are five in this range unused (or three with long-float arrays)