* Handle <, >, and = constraints.
* Handle complemented type constraints. The FIXME about infinite
regress was wrong; that was from before I figured out the infinite
regress came from the nasty interaction of optimistic EQL propagation
yielding partial (incorrect) types and type joining, which needs
correct types always, not just at the fixpoint.
Most of this patch was written by Jan Moringen. I just debugged some
cross-float stuff and added a slew of tests showing off the tighter
type propagation.
Also I fixed a weird test where the additional type smarts causes the
compiler to complain in compiler-2.impure-cload.lisp. Fix the values
to no longer cause a type error. Does the interaction between the
function type inference and the change in the FDEFINITION make sense
in that situation?
Run FLUSH-DEAD-CODE after doing the last FIND-DFO. The blocks deleted
by FIND-DFO may have made some nodes unused. This especially matters
for deleting CASTs, since ir2-convert chokes on unused casts.
A way to understand the new logic is that supposing (hypothetically) that
COMPILE-FILE-POSITION were a function, not a macro, then previously it was
acceptable only where the call to it would occur at runtime and not sooner.
This patch makes it ok to use at read-time and/or compile-time.
Of course since it is a macro, the call always occurs in the compiler,
so the preceding is just a model for explaining the behavioral change.
The primary use-case for this presently is to print line numbers
in log messages from user code, so there is one exported macro
named COMPILE-FILE-POSITION to do that. Future work includes
dumping a new artifact allowing annotation of backtraces by line#.
There is no switch to toggle collection of the data at read-time.
The slowdown in COMPILE-FILE is typically less than 3%, and
there is no impact on COMPILE (which can't report line numbers).
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.
* Do not store the global policy in null-lexenv, but include
it in subsequent lexenvs. Fixes visibility of global policy
in LOCALLY and MACROLET.
* Also actually enable the SB-LDB in default build instead of
just providing the framework to make this a good idea.
(Accidentally left out from from 0.9.13.33)