[armedbear-cvs] r13228 - trunk/abcl/src/org/armedbear/lisp

Alessio Stalla astalla at common-lisp.net
Fri Feb 25 22:43:10 UTC 2011


Author: astalla
Date: Fri Feb 25 17:43:08 2011
New Revision: 13228

Log:
Fix incorrect elimination of named local functions declared inline when they're actually reified in the flet/labels body.


Modified:
   trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp

Modified: trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp
==============================================================================
--- trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp	(original)
+++ trunk/abcl/src/org/armedbear/lisp/compiler-pass1.lisp	Fri Feb 25 17:43:08 2011
@@ -932,14 +932,15 @@
 		 (process-declarations-for-vars body nil block))
 	   (dolist (special (flet-free-specials block))
 	     (push special *visible-variables*))
-	   (setf (flet-form block)
-		 (list* (car form)
-			(remove-if (lambda (fn)
-				     (and (inline-p (local-function-name fn))
-					  (not (local-function-references-needed-p fn))))
-				   local-functions)
-			(p1-body (cddr form))))
-	   block)))))
+           (let ((body (p1-body (cddr form))))
+             (setf (flet-form block)
+                   (list* (car form)
+                          (remove-if (lambda (fn)
+                                       (and (inline-p (local-function-name fn))
+                                            (not (local-function-references-needed-p fn))))
+                                     local-functions)
+                          body)))
+           block)))))
 
 
 (defun p1-labels (form)
@@ -1033,9 +1034,9 @@
                  (p1-compiland compiland)))
              (list 'FUNCTION compiland)))
           ((setf local-function (find-local-function (cadr form)))
-           (dformat t "p1-function local function ~S~%" (cadr form))
-	   ;;we found out that the function needs a reference
-	   (setf (local-function-references-needed-p local-function) t)
+           (dformat "p1-function local function ~S~%" (cadr form))
+           ;;we found out that the function needs a reference
+           (setf (local-function-references-needed-p local-function) t)
            (let ((variable (local-function-variable local-function)))
              (when variable
                  (dformat t "p1-function ~S used non-locally~%"




More information about the armedbear-cvs mailing list