From ffbf426fce274d79a4131f395cea6ffe66c94d81 Mon Sep 17 00:00:00 2001
From: rtoy <rtoy>
Date: Sun, 14 Mar 2010 14:51:21 +0000
Subject: [PATCH] For a compiled function, recompile from sources if the
 function-lambda-expression is available and is in a null lexical environment.
  This is the quite useful previous behavior.

---
 compiler/main.lisp | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/compiler/main.lisp b/compiler/main.lisp
index d5c20e507..e216b6301 100644
--- a/compiler/main.lisp
+++ b/compiler/main.lisp
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/main.lisp,v 1.149 2010/02/15 16:34:42 rtoy Exp $")
+  "$Header: /Volumes/share2/src/cmucl/cvs2git/cvsroot/src/compiler/main.lisp,v 1.150 2010/03/14 14:51:21 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1952,10 +1952,20 @@ in the user USER-INFO slot of STREAM-SOURCE-LOCATIONs.")
 	     ;;   If the definition is already a compiled function,
 	     ;;   compile either produces that function itself (i.e.,
 	     ;;   is an identity operation) or an equivalent function.
+	     ;;
+	     ;; But if the function lambda expression is available,
+	     ;; and if the expression is defined in a null lexical
+	     ;; environment, recompile from sources.  (This was the
+	     ;; old behavior, which is quite useful.)
 	     (form (etypecase definition
 		     ((or cons eval:interpreted-function)
 		      `#',(get-lambda-to-compile definition))
-		     (function `',definition)))
+		     (function
+		      (multiple-value-bind (exp lexenv)
+			  (function-lambda-expression definition)
+			(if (and exp (not lexenv))
+			    `#',exp
+			    `',definition)))))
 	     (*source-info* (make-lisp-source-info form))
 	     (*top-level-lambdas* ())
 	     (*converting-for-interpreter* nil)
-- 
GitLab