Learn how easy it is to sync an existing GitHub or Google Code repo to a SourceForge project! See Demo


sbcl Log

Commit Date  
[9de65d] by Stas Boukarev Stas Boukarev

Disable win32 pathnames routines on -win32 and vice versa.

#-win32 has all the win32 pathname code enabled, but it's not used
anywhere and not exported. Even if using pathnames of a different OS
may be a good idea, it's currently not presented in any usable way and
only wastes space.

2013-11-06 17:20:21 Tree
[cf49f2] by Stas Boukarev Stas Boukarev

Fix contrib building on mingw.

The current directory has to be found out using pwd -W, to avoid any
conversion into unix-looking pathnames.

2013-11-06 17:11:53 Tree
[8c773a] by Stas Boukarev Stas Boukarev

Remove get2 variant of get.

(get x y [z]) was expand into (get3 x y z) or (get2 x y), and get2
called (get3 x y nil), just expand into (get3 x y nil) directly.

2013-11-06 00:46:26 Tree
[151fa3] by Stas Boukarev Stas Boukarev

Optimize raw-instance-slots-equalp for #-complex-float-vops.

The comparer function for COMPLEX types wasn't properly optimized
during cross-compilation because the types of REALPART and IMAGPART
weren't derived by the cross-compiler on account of
CROSS-FLOAT-INFINITY-KLUDGE, but the derivers do not actually perform
any mathematical derivation, just
(complex (double-float 10d0)) => (double-float 10d0).
Enabling them during cross-compilation allows = on complex floats be
optimized and avoids consing.

2013-11-05 15:56:00 Tree
[1cba0a] by Stas Boukarev Stas Boukarev

Fix lose() invocation inside sparc-arch.c

2013-11-05 13:48:03 Tree
[4c7c37] by Stas Boukarev Stas Boukarev

Optimize EQUALP on structures with raw slots.

Add a comparer slot to raw-slot-data, which is defined as
(lambda (index x y)
(= (%raw-instance-ref/double x index)
(%raw-instance-ref/double y index)))

Which is both faster than calling %raw-instance-ref/double out of
line and does not cons.

2013-11-04 22:52:37 Tree
[498ec5] by Paul Khuong Paul Khuong

[N]BUTLAST perform a single pass over the list

The old code would first count the number of conses, and then
SUBSEQ/(RPLACD/NTHCDR). Instead traverse the list with two offset
pointers that advance in lockstep.

Based on a patch by Johan Andersson, on lp#1245697.

2013-11-04 18:58:10 Tree
[8be78b] by Paul Khuong Paul Khuong

More complicated TYPEP tests are marginally transparent to type propagation

Expansions for TYPEP are wrapped in %typep-wrapper, a fancy identity. The
additional arguments track what value is being tested for what type, which
helps inform constraint propagation, as well as detecting redundant type

Such a wrapper is a hindrance to lower level control flow rewriting that are
essential for decent code generation. After a single pass of constraint
propagation, the wrapper evaporates and the TYPEP expansion becomes as opaque
as it is now.

2013-11-04 17:36:07 Tree
[ce6c27] by Paul Khuong Paul Khuong

Two new optimizer types for flow-sensitive type propagation

CONSTRAINT-PROPAGATE optimizers can add new information about the
state of the world after/if the function has returned. Function
type declarations/propagation suffice for simple patterns (e.g.
return types, or unconditional type requirements on arguments),
but this optimizer is more general.

Such optimizers receive two arguments, the combination node and the
current set of constraints, and return a sequence of constraints.
Constraints are lists of three or four values:
1. a constraint kind (either TYPEP, <, >, or EQL);
2, 3. two arguments, either LVARs, LAMBDA-VARs or a CTYPE;
4. optionally, whether the meaning of the constraint must be
This mimics the (defstruct (constraint ...)) in constraint.lisp.
If any of the argument is NIL, the constraint is skipped; otherwise,
it is added to current set of constraints. Optimizers have access
to that set, and can thus map LVARs to LAMBDA-VARs thanks to

CONSTRAINT-PROPAGATE-IF optimizers can instead hook into the
interpretation of functions as predicate, when their result feeds
into an IF node. They also receive the node and the current set
of constraints as arguments, and return four values. The first two
values are an LVAR and a CTYPE: if they are non-NIL, that LVAR is
of that CTYPE iff the combination returns true. The two remaining
values are sequences of constraints (see previous paragraph) for
the consequent (if-true) and alternative (if-false) branches,
respectively. These are useful for more complex tests, but also
to represent partial information, e.g., if an EQUAL test fails,
the two values are not EQL either.

2013-11-04 17:32:11 Tree
[2023ab] by Stas Boukarev Stas Boukarev

Fix foreign-stack-alignment test on SPARC.

2013-11-04 12:41:59 Tree
[f192f8] by Stas Boukarev Stas Boukarev

Fix raw-instance-slots-equalp on SPARC.

Some slots have to be aligned or they will cause a bus error. Take
alignment into account on #-(or x86 x86-64 ppc).

2013-11-03 21:18:01 Tree
[cc67ba] by Stas Boukarev Stas Boukarev

Fix EQUALP on structures with raw slots.

It always incremented the index by 1, even if slot takes up more than
one word. Increment by raw-slot-data-n-words.

2013-11-03 19:40:06 Tree
[9c9d6d] by Christophe Rhodes Christophe Rhodes

fix LET* environment semantics in sexp-based evaluator

2013-11-03 16:33:26 Tree
[e51821] by Stas Boukarev Stas Boukarev

Fix undefined function error on SPARC.

Adjust the register encoding in sparc-assem.S.

Thanks to John Long for providing access to a SPARC machine.

2013-11-03 15:09:31 Tree
[c6bbd0] by Stas Boukarev Stas Boukarev

Fix run-tests.sh on Solaris.

2013-11-03 10:57:06 Tree
[bd494c] by Stas Boukarev Stas Boukarev

Adjust the recent defmethod change.

(compile-or-load-defgeneric name) doesn't need the full eval-when
repertoire, only :compile-toplevel and :execute. :compile-toplevel for
subsequent forms and :execute for references within the body of
defmethod to itself. :load-toplevel is not needed since when the FASLs
are loaded no further processing is performed, this avoids the size
increase of the resulting FASLs.

2013-11-02 13:39:50 Tree
[8e6a4a] by Stas Boukarev Stas Boukarev

Add --help to run-tests.sh.

2013-11-01 12:47:38 Tree
[c0f931] by Stas Boukarev Stas Boukarev

tests: better reports when /bin/ed is not present.

When /bin/ed is not present the test failed with a confusing "unhandled
* Wrap the whole run-program-ed test into with-test, renaming it to run-program-/bin/ed.
* Add before it a test named :is-/bin/ed-installed?.

Making the report more self-describing:
Failure: run-program.impure.lisp / IS-/BIN/ED-INSTALLED?
Failure: run-program.impure.lisp / RUN-PROGRAM-/BIN/ED

2013-11-01 12:34:27 Tree
[572860] by Stas Boukarev Stas Boukarev

defmethod: make the function known at compile time.

(defmethod gf ())
(defun f () (gf))
Produced a warning about an undefined function, even though it would
be implicitly created by defmethod.
Fixes lp#503095.

2013-11-01 11:50:55 Tree
[5f8917] by Stas Boukarev Stas Boukarev

Remove *static-foreign-symbols* from #+sb-dynamic-core builds.

2013-10-31 18:57:24 Tree
[adcb5a] by Stas Boukarev Stas Boukarev

Fix defmethod arglists leaking into make-method-lambda.

defmethod communicates to make-method-lambda using special variables,
but make-method-lambda then performs code-walking which expands
macros, and if a macro calls another make-method-lambda directly, this
make-method-lambda will receive incorrect information which may cause
problems with wrong lambda lists.
Reported and diagnosed by Attila Lendvai.

2013-10-31 14:48:26 Tree
[062283] by Stas Boukarev Stas Boukarev

describe: show the same information about functions for 'x and #'x.

Declared type and information about inlining were not shown when used
as #'function.

2013-10-31 14:48:26 Tree
[24e3d8] by Christophe Rhodes Christophe Rhodes

Fix install/binary-distribution scripts for new contrib arrangements

Everything has moved, which led the binary-distribution script not to
include test-passed files, and the install script to look for them in
the wrong place anyway.

2013-10-31 14:45:17 Tree
[7f1e94] (sbcl-1.1.13) by Christophe Rhodes Christophe Rhodes

1.1.13: will be tagged as "sbcl-1.1.13"

2013-10-31 10:42:43 Tree
[441dfe] by Paul Khuong Paul Khuong

Make sure quantifiers don't cons

Quantifiers like SOME and EVERY are implemented in terms of (MAP NIL)
of a wrapper function with early RETURN. If type information does not
enable MAP to be open coded, declarations are necessary to avoid
consing up a closure and a value cell for the return.

DX functions really shouldn't cause value cells for return blocks.

Also, revert d0f65b07a30adc989e36a82ddc0ed54d135d638e which is
now mostly redundant.

2013-10-26 17:47:53 Tree
Older >