[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