1.0.44.28: allow approximating unions of numeric types
authorNikodemus Siivola <nikodemus@random-state.net>
Thu, 18 Nov 2010 12:02:45 +0000 (12:02 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Thu, 18 Nov 2010 12:02:45 +0000 (12:02 +0000)
commitcaab09a40b715ef40012c367923dec8224f74d79
treeacdf179d42ccf599e2c04832aa1221813199a1d9
parentdbe82b489260b2ef76e916d0aeaee8b3850f5f52
1.0.44.28: allow approximating unions of numeric types

 (dummy commit: change described here happened in the last commit really,
  but the commit message was subtly wrong and missed the version number)

 * Binding *APPROXIMATE-NUMERIC-UNIONS* does that. It must be bound
   only by callers of TYPE-UNION that know what they want -- in general

     (OR (INTEGER 1 2) (INTEGER 4 4)) => (INTEGER 1 4)

   is wrong, as (NOT (INTEGER 1 4)) doesn't include 3. But in special cases
   like deriving the return type of a function it can be done.

 * Rename MAKE-CANONICAL-UNION-TYPE MAKE-DERIVED-UNION-TYPE, and bind *A-N-U*
   there if we start accumulating an overly large union of numeric types.
   Definition of "overly large" can be adjusted via
   *DERIVED-NUMERIC-UNION-COMPLEXITY-LIMIT*.

 * Fixes lp#309448 and the recent compiler performance regression due
   to new CONCATENATE deftransform as reported on sbcl-devel.
version.lisp-expr