From: Alexey Dejneka Date: Sat, 13 Sep 2003 10:39:27 +0000 (+0000) Subject: 0.8.3.58: X-Git-Url: http://repo.macrolet.net/gitweb/?a=commitdiff_plain;h=ecb9046ba0d9b56ede06740e5c8b40f3b139651f;p=sbcl.git 0.8.3.58: * Describe problems with source transformation of assotiative functions. --- diff --git a/BUGS b/BUGS index 603a51f..4158710 100644 --- a/BUGS +++ b/BUGS @@ -1226,3 +1226,22 @@ WORKAROUND: strongly suspect that they would.) 288b2: SINGLE-FLOAT is distinct from DOUBLE-FLOAT. (This is in a sense just one aspect of bug 288a.) + +289: "type checking and source-transforms" + a. + (block nil (let () (funcall #'+ (eval 'nil) (eval '1) (return :good)))) + signals type error. + + Our policy is to check argument types at the moment of a call. It + disagrees with ANSI, which says that type assertions are put + immediately onto argument expressions, but is easier to implement in + IR1 and is more compatible to type inference, inline expansion, + etc. IR1-transforms automatically keep this policy, but source + transforms for associative functions (such as +), being applied + during IR1-convertion, do not. It may be tolerable for direct calls + (+ x y z), but for (FUNCALL #'+ x y z) it is non-conformant. + + b. Another aspect of this problem is efficiency. [x y + z +] + requires less registers than [x y z + +]. This transformation is + currently performed with source transforms, but it would be good to + also perform it in IR1 optimization phase. diff --git a/version.lisp-expr b/version.lisp-expr index df3f766..c9ac1cd 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -17,4 +17,4 @@ ;;; checkins which aren't released. (And occasionally for internal ;;; versions, especially for internal versions off the main CVS ;;; branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.8.3.57" +"0.8.3.58"