src/runtime/wrap.c: move conditional definition of WIN32_LEAN_AND_MEAN so that it precedes other #includes, to prevent conflicting win32 stuff from being pulled in by the new wrap.h. src/runtime/wrap.h: Add preprocessor conditionals to guard against repeated inclusion. tools-for-build/grovel-headers.c: grovel the wrapped stat types on win32.
* Add a result-type dependent DEFTRANSFORM which open-codes directly to calls to REPLACE. * Constant-fold the array reads for constant string arguments in the transform (intended as a slezy benchmark trick, but actually it looks as if having some literal strings mixed in with variables is pretty common in real world CONCATENATE uses). * Add transforms for REPLACE on mixed SIMPLE-BASE-STRINGS and (SIMPLE-ARRAY CHARACTER (*)) to support. * Speeds up a simple benchmark of concatenating two three-character strings by a factor of 15, and by a factor of 30 when the strings are constant. For a more real-world example, doing DIRECTORY on a large set of files speeds up by 25%. Also: * Fix a broken test (extra close paren) that was uncovered by the write-no-partial-fasls change.
* grovel-headers.c now pulls in src/code/runtime.h, and so needs a kludge to keep Win32's definition of boolean from conflicting with SBCL's. This kludge already existed in win32-os.c, so I moved it into runtime.h.
* CLHS says the first return value of COMPILE-FILE is NIL if "file could not be created" -- interpret this to mean "fasl could not be created" and don't count incomplete fasls as fasls.
* Logical hosts. * TRACE. * Instrumenting profiler. * Mapping over *PACKAGE-NAMES*.
* Use :SYNCHRONIZED hash-tables for the most part, and a light dash of WITH-LOCKED-HASH-TABLE as approriapte: *FORWARD-REFERENCED-LAYOUTS*, CLASSOID-SUBCLASSES, *COMPILED-DEBUG-FUNS*, *FUN-END-COOKIES*, *COMPONENT-BREAKPOINT-OFFSETS*, *EFFECTIVE-METHOD-CACHE*. * Replace *FOREIGN-LOCK* with *SHARED-OBJECT-LOCK* and hash-table based locking for *LINKAGE-INFO* for efficiency.
* :SYNCHRONIZED argument to MAKE-HASH-TABLE. * HASH-TABLE-SYNCHRONIZED-P predicate. * WITH-LOCKED-HASH-TABLE for coarser locks. * Additional MAPHASH & WITH-HASH-TABLE-ITERATOR documentation. * :LOCKED argument added to DOHASH, and used where appropriate (some usages might be overly conservative, though, and could be removed.)
* In the old WITH-PINNED-OBJECTS implementation we pushed pointers onto stack explicitly (without telling the compiler), executed the body, and _prior_to_returning_values_of_body_ popped the pointers. If the values from the body were in progress of being returned via unknown-values convention we would (try to) pop the pointers while the last callee stack frame (where the values to be returned are) is still on the stack. In many cases this was harmless, as the correct SP was restored soon enough, but there were bad interactions as well. * Solution: instead of explicitly pushing pointers, use a LET to add binding to the current stack frame for the objects, and further use a magic TOUCH-OBJECT function implemented with an empty VOP to trick the compiler into keeping the variables live till the end of the body. Probably not perfect, but seems to do the job. Of the added test-case, the MULTIPLE variants used to fail prior to this.
* Prior to this SBCL used to only print an error message to stderr of the process, but since bogus fixups should only occur if something is badly wrong we prefer to lose().
* As discussed on sbcl-devel. * Reduce the support burden: We get a lot of bug reports that turn out to be caused by stale fasls, and even more people probably don't report these problems, but just end up thinking that SBCL crashes all the time. * +FASL-FILE-VERSION+ retained for backwards compability, but should only be incremented if the actual fasl format changes.
Someone (jsnell?) on #lisp pointed out that there was still a #!+SB-DOC left behind after some clod deleted the corresponding doc string.:-| also a few comment tweaks
* Instead of keeping global tables, allocate new ones for each call. Since common case seems to be a "decently small" form, use a list instead of hash-table. ...but we could really do with a better internal set representation for arbitrary objects -- both here and in MEMBER type machinery.
* paraphrase the hash-table traversal/side-effect rule
* x86 and x86-64 only.
Reported by Eugene Ossintsev
* Nuke it since there is no grep option (that I could see) to reverse -i or ignore the GREP_OPTIONS variable * Patch by Daniel Lowe
… is OK * (In my 126.96.36.199 patch, I fixed a READER-ERROR printing bug and wrote that parallel PARSE-ERROR and STREAM-ERROR printing bugs remained and that I would fix them. Now finally returning to fix them, I find that they were fixed already, the tests work with with no additional fixes needed.) * so I just un-#+NILed-out the tests * also made a few trivial rearrangements in src/code/condition.lisp, moving things around without changing meaning