0.8.3.58:
authorAlexey Dejneka <adejneka@comail.ru>
Sat, 13 Sep 2003 10:39:27 +0000 (10:39 +0000)
committerAlexey Dejneka <adejneka@comail.ru>
Sat, 13 Sep 2003 10:39:27 +0000 (10:39 +0000)
        * Describe problems with source transformation of assotiative
          functions.

BUGS
version.lisp-expr

diff --git a/BUGS b/BUGS
index 603a51f..4158710 100644 (file)
--- 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.
index df3f766..c9ac1cd 100644 (file)
@@ -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"