Commits on Jul 25, 2007
  1. 1.0.8: release, will be tagged as sbcl_1_0_8

    William Harold Newman committed Jul 25, 2007
Commits on Jul 23, 2007
  1. 1.0.7.39: Fix typo in comment.

    Thiemo Seufer committed Jul 23, 2007
  2. 1.0.7.38: Fix the MIPS single-stepper break instruction.

    Thiemo Seufer committed Jul 23, 2007
Commits on Jul 21, 2007
  1. @nikodemus

    1.0.7.37: fix non-x86oid builds

     * WITH-PINNED-OBJECTS needs to be a DEF!MACRO, not DEFMACRO. No SB!SYS prefix
       needed, as SB-VM uses SB-SYS.
    
     (Tested on only PPC/Darwin.)
    nikodemus committed Jul 21, 2007
  2. @nikodemus

    1.0.7.36: FIND-SLOT-DEFINITION to return NIL when called with non-slo…

    …t-classes
    
     * Add a default method to CLASS-SLOT-VECTOR that returns #(NIL), restoring
       the pre-1.0.7.26 behaviour of calling SLOT-MISSING when trying to access
       slots in non-SLOT-CLASS instances.
    
     * Add a slightly dubious test-case.
    nikodemus committed Jul 21, 2007
  3. @nikodemus

    1.0.7.35: SLOT-VALUE and SET-SLOT-VALUE transforms aren't important

     * No compiler notes for default policy.
    
     * Test case.
    nikodemus committed Jul 21, 2007
Commits on Jul 20, 2007
  1. @nikodemus

    1.0.7.34: adjust lexenv frobbing in TRANSFORM-CALL to happen earlier

     * Need to replace the call lexenv with the frobbed one before
       WITH-IR1-ENVIRONMENT-FROM-NODE so that IR1-CONVERT-INLINE-LAMBDA
       gets a consistent *LEXENV* binding.
    
       (This has been around since 0.9.17.5, but since it only affects
       known functions with optional arguments and transformations it
       suddenly become a lot more easy to hit with the new MEMBER and
       ASSOC transforms.)
    
     * Test case.
    nikodemus committed Jul 20, 2007
Commits on Jul 19, 2007
  1. @nikodemus

    1.0.7.33: better handling of ASSOC and MEMBER on empty lists

     * If the second argument is a constant NIL, remove the whole
       call in the transform and just return NIL.
    nikodemus committed Jul 19, 2007
  2. @nikodemus

    1.0.7.31: updated TODO file

     Let the controversy begin.
    
     No code changes.
    nikodemus committed Jul 19, 2007
  3. @nikodemus

    1.0.7.31: paper over bug inlining known functions in high-debug code

     NOT A PROPER FIX!
    
     * Don't inline known functions unless let-conversion is enabled, which papers
       over the real bug -- apparently due to BIND/UNBIND-SENTINEL vop insertion.
    nikodemus committed Jul 19, 2007
  4. @nikodemus

    1.0.7.30: be more paranoid about saps

     * Since compiler transformations can introduce closures and hence
       cause "this is obviously always on stack or in register" intuition
       to be wrong, be more vigilant about pinning objects before
       sap-taking.
    
     * Also convert a couple of WITHOUT-GCINGs to WITH-PINNED-OBJECTS
       instead.
    nikodemus committed Jul 19, 2007
  5. @nikodemus

    1.0.7.29: better ASSOC transform

     * Extend the new MEMBER optimizations to handle ASSOC as well, and define
       the corresponding %ASSOC[-KEY][-TEST][-NOT] functions as well.
    
     * Clean up the old ASSOC -> ASSQ and MEMBER -> MEMQ transforms that
       aren't firing anymore.
    
     * Tests.
    nikodemus committed Jul 19, 2007
Commits on Jul 17, 2007
  1. @nikodemus

    1.0.7.28: compiler being nicer to the compiler

     * In MAKE-XEP-LAMBDA-EXPRESSION, use EQL instead of = and NOT <
       instead of >= to avoid additional rounds of deftransforms and
       lambda-conversion.
    
     * Add a source transform for %COERCE-CALLABLE-TO-FUN to pick of
       simple cases, also avoid inserting additional lambdas to the code.
    
     * Use %FUNCALL and %COERCE-CALLABLE-TO-FUN in MAPFOO-TRANSFORM,
       providing not just faster compilation, but also making (MAPCAR F
       ...) faster by lifting the %C-C-T-F out of the loop.
    
     This work was based on Juho's observation that a major source of
     compiler slowness are all the lambdas generated by transforms: not
     that this changes the big picture in any way -- just shaves a few
     corners. If you wish to get a gut feeling of what is going on, stick
     a (PRINT (LIST DEBUG-NAME BODY)) in IR1-CONVERT-INLINE-LAMBDA.
    nikodemus committed Jul 17, 2007
  2. @nikodemus

    1.0.7.27: SLOT-CLASS cleanups

     * No need for two separate implementations of FIND-SLOT-DEFINITION -- just
       move the one we care about to slots-boot.lisp along with MAKE-SLOT-VECTOR
       (which it is intimately tied up with.) Add comments for posterity.
    
     * There should be no (SETF CLASS-SLOTS) or (SETF CLASS-DIRECT-SLOTS), so
       :READER, not :ACCESSOR in SLOT-CLASS.
    nikodemus committed Jul 17, 2007
  3. @nikodemus

    1.0.7.26: asymptotically faster FIND-SLOT-DEFINITION

     * Add a SLOT-VECTOR slot the SLOT-CLASS. The SLOT-VECTOR contains
       plists of slot definition objects hashed on the slot name, allowing
       O(1) lookups based on the slot name, instead of the old O(N)
       lookups -- where N is the number of slots in a class.
    
       Makes everything requiring slot definition lookups faster, simple
       tests showing SLOT-VALUE with variable name on a 5-slot class to be
       roughly 50% faster.
    nikodemus committed Jul 17, 2007
  4. @nikodemus

    1.0.7.25: better MEMBER transform

     * Specialized versions for different keyword combinations: %MEMBER,
       %MEMBER-TEST, %MEMBER-KEY-TEST, etc. These versions have positional
       arguments, and the callable arguments are known to be functions.
    
     * The transform open codes for all combinations of keywords if the
       second argument is constant and (>= SPEED SPACE). Otherwise the
       transform selects the appropriate specialized version and open
       codes %COERCE-CALLABLE-TO-FUN around keyword arguments, allowing
       type inference to optimize it away for arguments known to be
       functions.
    
     * Tests.
    nikodemus committed Jul 17, 2007
  5. @csrhodes

    1.0.7.24: Fix CALL-NEXT-METHOD / EVAL-WHEN interaction

    	Reported by Sascha Wilde sbcl-devel 2007-07-15.  This fix is not
    	the one that I sent to sbcl-devel 2007-07-16, because that's
    	just too horrible; instead we expand DEFMETHOD into separate
    	:LOAD-TOPLEVEL and :EXECUTE branches.  (This needs a minor test
    	adjustment)
    csrhodes committed Jul 17, 2007
  6. @nikodemus

    1.0.7.23: delete a large block of commented-out code from seqtran.lisp

     * This is why we have version control. (But add a comment pointing out
       that this code exists, so that people know where to look for it.)
    
       The code that is deleted here contains the apparent beginnings of a
       better sequence transform infrastructure: a compiler representation
       of an iteration over a sequence.
    nikodemus committed Jul 17, 2007
Commits on Jul 16, 2007
  1. @nikodemus

    1.0.7.22: (SETF SYMBOL-PLIST) type checking

     * Disallow non-lists as the new value.
    nikodemus committed Jul 16, 2007
  2. @nikodemus

    1.0.7.21: threaded SET & BIND VOP touchups

     * In SET: don't check versus TLS-INDEX == 0: TLS-INDEX 0 already
       gives the NO-TLS-VALUE-MARKER. Smaller code, and common case seems
       to be assignment to a bound variable.
    
     * In BIND: use one register less, splitting the duties of the old
       TEMP between TLS-INDEX and EAX/RAX. Increment the *FREE-TLS-INDEX*
       directly in memory.
    nikodemus committed Jul 16, 2007
  3. @nikodemus

    1.0.7.20: note for SBCL packagers

     See doc/PACKAGING-SBCL.txt.
    nikodemus committed Jul 16, 2007
Commits on Jul 15, 2007
  1. @nikodemus

    1.0.7.19: SB-EXT:COMPARE-AND-SWAP

     * New macro SB-EXT:COMPARE-AND-SWAP provides a supported interface to
       compare-and-swap functionality.
    
     * New info-type :FUNCTION :STRUCTURE-ACCESSOR allows us to map from
       defstruct slot-accessor names to defstruct descriptions.
    
     * Add :CAS-TRANS slot keyword to DEFINE-PRIMITIVE object, and the
       compiler machinery needed to support compare and swap on primitive
       object slots.
    
     * New VOPs COMPARE-AND-SWAP-SLOT and %COMPARE-AND-SWAP-SYMBOL-VALUE.
    
     * Delete now unnecessary DEFINE-STRUCTURE-SLOT-COMPARE-AND-SWAP.
    
     * Use a consistent %COMPARE-AND-SWAP-FOO naming scheme for CAS
       functions.
    
     * Tests.
    
     Tested on x86/Linux & x86/Darwin, x86-64/Darwi, and PPC/Darwin.
    nikodemus committed Jul 15, 2007
Commits on Jul 13, 2007
  1. @nikodemus

    1.0.7.18: automagic debugging-friendly gensyms

     * New function: SB-INT:BLOCK-GENSYM, which appends the innermost
       enclosing non-NIL block name to the given stem. The default
       environment used is the current *LEXENV* if one exists.
    
     * Use it instead of GENSYM in MAKE-GENSYM-LIST and WITH-UNIQUE-NAMES.
    nikodemus committed Jul 13, 2007
Commits on Jul 12, 2007
  1. @nikodemus

    1.0.7.17: SLOT-VALUE and SET-SLOT-VALUE transforms (really 1.0.7.16)

     This is the real commit message that was supposed to go in 1.0.7.16.
     Sorry.
    
     * Define SLOT-VALUE and SET-SLOT-VALUE as known functions.
    
     * Use &ENVIRONMENT in CONSTANTP and CONSTANT-FORM-VALUE calls in
       their compiler-macros.
    
     * Add transforms for SLOT-VALUE and SET-SLOT-VALUE in addition to the
       compiler-macros. The transforms are functionally equivalent to the
       compiler-macros, but catch more cases: eg.
    
         (define-modify-macro appendf (&rest lists) append)
         (appendf (slot-value x 'y) z)
    
       needs the deftransforms as setf-expansion replaces the constant
       argument with a gensym.
    
       Keep the compiler-macros around, since they catch the common cases
       early and don't mess up the build: the transforms are agressive
       enough that we can't enable them until the PCL boot-state is
       complete. (The compiler-macros are also slightly cheaper, since
       each transform introduces a new lambda.)
    nikodemus committed Jul 12, 2007
  2. @nikodemus

    1.0.7.14: thread-safe INTERN, EXPORT, &co

     * Modifications to packages grab a global lock. INTERN is the only
       real potential performance bottleneck here, but as long as the
       symbol already exists it doesn't need to get the lock.
    
       We need a global lock instead of a per-package lock because eg.
       (EXPORT 'FOO::BAR :FOO) and (INTERN "BAR" :ZOT) can conflict, even
       though they operate on different packages.
    
       Since races should be rare we use a spinlock to avoid making a
       system call for every release.
    
       Interrupt safety? Probably no. It's likely that you can wedge the
       package system into a bad state if you really try.
    nikodemus committed Jul 12, 2007
  3. @nikodemus

    1.0.7.15: fix buglet in NAME-LAMBDALIKE

     * Remove stray QUOTE. Reported by David Smith.
    nikodemus committed Jul 12, 2007
Commits on Jul 11, 2007
  1. @nikodemus

    1.0.7.14: thread-safe INTERN, EXPORT, &co

     * Modifications to packages grab a global lock. INTERN is the only
       real potential performance bottleneck here, but as long as the
       symbol already exists it doesn't need to get the lock.
    
       We need a global lock instead of a per-package lock because eg.
       (EXPORT 'FOO::BAR :FOO) and (INTERN "BAR" :ZOT) can conflict, even
       though they operate on different packages.
    
       Since races should be rare we use a spinlock to avoid making a
       system call for every release.
    
       Interrupt safety? Probably no. It's likely that you can wedge the
       package system into a bad state if you really try.
    nikodemus committed Jul 11, 2007
Commits on Jul 4, 2007
  1. 1.0.7.13: Mistakes should be fun, error messages should be beautiful.

    	take one ~% down, replace it with ~_, several hundred
    		vintage error message strings in the repository...
    William Harold Newman committed Jul 4, 2007
Commits on Jul 3, 2007
  1. @nikodemus

    1.0.7.12: fix clos-interrupts.impure.lisp for unithreaded builds

     * Forgot #+sb-thread from the test case.
    nikodemus committed Jul 3, 2007
  2. @nikodemus

    1.0.7.11: fix test WITHOUT-INTERRUPTS+GET-MUTEX

     * Incorrect use of JOIN-THREAD.
    nikodemus committed Jul 3, 2007
Commits on Jul 2, 2007
  1. 1.0.7.10: added a FINISH-OUTPUT before switching streams

    	Before this little patch, compiling a source file containing
    	only three #\. characters gave output like this:
    	  * (compile-file "dots.lisp")
    	  ; compiling file "/tmp/dots.lisp" (written 02 JUL 2007 12:27:29 PM):
    	  ;
    	  ; compilation unit aborted
    	  ;   caught 1 fatal ERROR condition
    	  ; compilation aborted because of fatal error:
    	  ;   READ failure in COMPILE-FILE:
    	  ;     READER-ERROR at 3 (line 1, column 3) on #<SB-SYS:FD-STREAM for "file /tmp/dots.lisp" {AB65D21}>:
    
    	  ; /tmp/dots.fasl written
    	  ; compilation finished in 0:00:00
    	  #P"/tmp/dots.fasl"
    	  T
    	  ; too many dotsT
    	  *
            After this patch, the 'too many dots' text ends up where
    	it should (several lines earlier).
    William Harold Newman committed Jul 2, 2007
  2. @csrhodes

    1.0.7.9: DEFAULT-UNKNOWN-VALUES for more than 7 args on x86-64

    	Convinced myself that my patch was right, and that JMP-SHORT was
    	an artifact of the previous calling convention.  Delete
    	the JMP-SHORT pseudo-instruction forthwith.
    csrhodes committed Jul 2, 2007
Commits on Jul 1, 2007
  1. @nikodemus

    1.0.7.8: micro-optimize STRING->UTF8

     * Slight cleverness about types, and inline ADD-BYTE locally.
    
     * If the utf8-length is the same as the length of the subsequence use
       a faster path.
    
     * Up to 60% faster on my test-cases (strings of random characters in
       the full character-code range.)
    nikodemus committed Jul 1, 2007
  2. @nikodemus

    1.0.7.7: slightly less broken handling of obsolete structures

     * Trap them correctly in PCL.
    
     * Correct package so that CLASSOID-TYPEP signals the correct error
       instead of running into an undefined function.
    
     * Tests.
    nikodemus committed Jul 1, 2007
  3. @nikodemus

    1.0.7.6: additional test case that fails under SB-LUTEX

     Buggrit, millenium hand and shrimp!
    nikodemus committed Jul 1, 2007