Skip to content
Commits on May 20, 2012
@jsnell jsnell 1.0.57: will be tagged as "sbcl-1.0.57" 77d8891
Commits on May 21, 2012
@nikodemus break infinite recursion in GENERATE-SLOTD-TYPECHECK
  Compilation of a typecheck can cause class finalization, which in turn can

  Given the right sort of dependency graph, this can cause a cycle which needs
  to be broken.

  Regression from, fixed bug 1001799.
@nikodemus implement ATOMIC-UPDATE
  Nicer than having to write explicit CAS loops.

  Also improve COMPARE-AND-SWAP docstring, and remove the EXPERIMENTAL label
  from it.
@nikodemus COMPILED-PROGRAM-ERROR source form needs *PRINT-ESCAPE*
  PRINC-TO-STRING is not what we want here.
@nikodemus factor debug-name cleaning into a separate function
  We will need it elsewhere too.
@nikodemus lazy *STACK-TOP-HINT*s
  Allow binding it to a symbol, which is resolved when entering the debugger:
  it denotes the name of the first uninteresting frame.

  This simplifies ERROR, CERROR, BREAK, %BREAK, and makes interrupts more
  efficient as we no longer need to find the interrupted frame when entering
  an interupt handler.

  It also makes (handler-bind ((error #'invoke-debugger)) ...) once again gain
  the benefits of the stack top hint, which we lost when we ceased the provide
  the hint around the call to SIGNAL for efficiency reasons. Best of both
  worlds, one hopes.
@nikodemus robustify COUNT-FULL-CALLS in the test suite
 Move it to compiler-test-utils.lisp, while at it.
@nikodemus refactor GET-TOPLEVEL-FORM &co between debugger and disassembler
  * Merge the implementations in debug.lisp and target-disassembler.lisp.

  * Get rid of most of the cacheing.

  * Prefer the DEBUG-SOURCE-FORM if it exists: thanks to *SOURCE-NAMESTRING*
    we can have misleading namestrings for functions generated by calls to
    EVAL during LOAD, etc.
@nikodemus fix source information for functions from EVAL
 * Removed the breathtaking (NAMED-LAMBDA (EVAL (DEFUN FOO)) ...) hack, which
   caused inconsistent source locations, and broke the built-in debugger
   source command for evaluated functions.

   Replace it with *SOURCE-FORM-CONTEXT-ALIST*, which allows the simple
   evaluator to communicate the original context to the compiler without
   messing with the function source.

   This also means we no longer have to wrap named-lambdas and lambdas in
   another lambda, but can instead compile them directly -- which in turn
   allows FUNCTION-LAMBDA-EXPRESSION to work correctly for definitions from
   EVAL and LOAD.

 * Additionally, use a handler to muffle any compiler notes from EVAL instead
   of using a declaration: those can leak to the user via F-L-E.

 * Change ACTUALLY-COMPILE to return a function signaling an error instead of
   returning NIL when compilation fails fatally. Doing this in
   ACTUALLY-COMPILE allows us to rely on COMPILE-IN-LEXENV always returning a
   function, and gives easy access to a better error message.

 * Properly associate COMPILER-ERRORS with their SIGNAL-ERROR restart.

 * Adjust debug.impure.lisp to be less dependent on the details of

 * Test cases. Pay special attention to TEST-DEBUGGER in debug.impure.lisp.

 * New docstring for COMPILE. Added a sneaky teaser about COMPILE being able
   to recompile things, which is new starting to look feasible.
@nikodemus make ENSURE-GENERIC-FUNCTION accept method combination arguments
  Previously we only accepted a list designating the method combination, but
  since MOP also specifies a way to grab the actual method combination, we
  should really accept that as well.

  Fixes bug 936513.
@nikodemus some nincompoop broke the build
@slyrus slyrus implicit generic function warning improvement
 the warning now prints out the package of the symbol that corresponds
 to the newly created generic function.
Commits on May 22, 2012
@stassats stassats run-program: Don't decode and re-encode environ.
Leave environ unchanged when no :environment argument is provided.
Closes lp#985904.
@stassats stassats run-program: Don't use /tmp unconditionally.
* Use TEMP on win32 and TMPDIR on non-win32.
* Don't delete just opened temporary files on windows, because opened
  files cannot be unlinked on windows.

Fixes lp#968837.
@nikodemus better SIGNAL

  Move out the *BREAK-ON-SIGNALS* stuff to a separate function for
  clarity. Conditionalize the call there, meaning those restarts don't need to
  be allocated unless we actually need them -- making SIGNAL faster and a lot
  less consy. (TYPEP calls still cons, though. Can't have everything...)
Commits on May 23, 2012
@stassats stassats gensym: Don't restrict numerical argument to fixnum.
(gensym number) was restricted to fixnums, restrict it to
unsigned-byte, as per the standard.
Commits on May 25, 2012
@leuler leuler Use multi-byte NOPs for code alignment on x86-64.
This is intended to speed up execution of such code sequences. It makes
the disassembly output somewhat more readable, too. The multi-byte NOP
instructions are chosen according to the recommendations of both AMD and
Intel. All existing x86-64 processors should support the "0f 1f" opcode

This adds the needed infrastructure to the backend-independent compiler
parts and uses it from x86-64. Backends not using this functionality are
left unchanged.

Extend EMIT-ALIGNMENT to allow to specify multi-byte NOPs to be used
instead of repetitions of the single-byte NOP and change the call in
EMIT-BLOCK-HEADER on x86-64 to trigger this. Extend EMIT-SKIP to call
EMIT-LONG-NOP in this case.

On x86-64, add EMIT-LONG-NOP as the instruction emitter and extend the
disassembler entry for NOP to understand the multi-byte forms, too.

Make EMIT-FILLER decide more carefully whether to join fillers that are
adjacent in the list of segment annotations: Only join them if they are
immediately adjacent in the segment, too. (Otherwise the joined filler
would cover the wrong parts of a shortened alignment sequence.)

In certain circumstances %EMIT-ALIGNMENT splits an alignment into two
parts. This may not be necessary but has not yet been changed, so
sometimes one more long NOP than needed is assembled.
@leuler leuler Add a missing launchpad reference to NEWS. b41220b
Commits on May 27, 2012
@lmj lmj fix MAP-INTO performance
* remove the O(n^2) algorithm for lists

* use (MAP NIL ...) for all sequence types

* avoid unnecessary LENGTH calls

* update fill pointer after mapping succeeds, not before

* add tests for MAP-INTO (there were none!)

* add some WITH-TESTs to tests/map-tests.impure.lisp
@lmj lmj automate widetag dispatching

* replace the VECTOR-SUBSEQ* dispatch scaffolding
@lmj lmj widetag dispatch for MAP-INTO 892a835
@nikodemus move vm-array.lisp earlier in the build, remove %%SAETP-INFO%%
  This way DEFINE-ARRAY-DISPATCH can use *S-A-E-T-P* directly.
@nikodemus add DO-VECTOR-DATA, remove special case from VECTOR-MAP-INTO
  DO-VECTOR-DATA is like DOVECTOR, but uses WITH-ARRAY-DATA and grabs the
  right reffer function so there's no per-element dispatch.

  Since MAP used DOSEQUENCE for for-effect/arity-1 case, and DOSEQEUNCE in
  turn uses DOVECTOR, replacing DOVECTOR there with DO-VECTOR-DATA we get the
  a performance boost while being able to drop the special case in

  Add a test for which the special case was broken: mapping a list into a
@nikodemus update NEWS
  MAP-INTO improvements.

  DOSEQUENCE improvement.

  Move optimizations above bugs.