1.0.44.16: ir2tran: Don't try to stack-allocate VALUE-CELLs.
authorAlastair Bridgewater <lisphacker@users.sourceforge.net>
Tue, 9 Nov 2010 19:45:36 +0000 (19:45 +0000)
committerAlastair Bridgewater <lisphacker@users.sourceforge.net>
Tue, 9 Nov 2010 19:45:36 +0000 (19:45 +0000)
  * Explicit VALUE-CELLs are only used if a closure that refers
to a mutable LAMBDA-VAR has indefinite extent, implying that the
reference itself has indefinite extent.  In such cases, dynamic
extent allocation of the VALUE-CELL is contraindicated.

  * Remove most of the logic from EMIT-MAKE-VALUE-CELL, leaving
only the statistics-tracking (EVENT) and the VOP emission,
forcing the new VALUE-CELL to be heap-allocated.

src/compiler/ir2tran.lisp
version.lisp-expr

index d518f0c..bedbda8 100644 (file)
 (defevent make-value-cell-event "Allocate heap value cell for lexical var.")
 (defun emit-make-value-cell (node block value res)
   (event make-value-cell-event node)
-  (let* ((leaf (tn-leaf res))
-         (dx (when leaf (leaf-dynamic-extent leaf))))
-    (when (and dx (neq :truly dx) (leaf-has-source-name-p leaf))
-      (compiler-notify "cannot stack allocate value cell for ~S" (leaf-source-name leaf)))
-    (vop make-value-cell node block value
-         ;; FIXME: See bug 419
-         (eq :truly dx)
-         res)))
+  (vop make-value-cell node block value nil res))
 \f
 ;;;; leaf reference
 
index c73fcc4..2d86753 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".)
-"1.0.44.15"
+"1.0.44.16"