CMUCL commit: src/compiler (main.lisp)

Raymond Toy rtoy at common-lisp.net
Mon Feb 15 17:34:43 CET 2010


    Date: Monday, February 15, 2010 @ 11:34:43
  Author: rtoy
    Path: /project/cmucl/cvsroot/src/compiler

Modified: main.lisp

Fix from Helmut Eller for a bug mentioned by Madhu on cmucl-imp,
2010/02/14:

$ echo '(compile nil (lambda (x) x))' > foo.lisp
$ lisp -noinit
* (compile-file "foo.lisp")
* (load *)

causes an error. 


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


Index: src/compiler/main.lisp
diff -u src/compiler/main.lisp:1.148 src/compiler/main.lisp:1.149
--- src/compiler/main.lisp:1.148	Fri Jan 22 01:17:13 2010
+++ src/compiler/main.lisp	Mon Feb 15 11:34:42 2010
@@ -5,7 +5,7 @@
 ;;; Carnegie Mellon University, and has been placed in the public domain.
 ;;;
 (ext:file-comment
-  "$Header: /project/cmucl/cvsroot/src/compiler/main.lisp,v 1.148 2010-01-22 06:17:13 rtoy Exp $")
+  "$Header: /project/cmucl/cvsroot/src/compiler/main.lisp,v 1.149 2010-02-15 16:34:42 rtoy Exp $")
 ;;;
 ;;; **********************************************************************
 ;;;
@@ -1945,7 +1945,17 @@
 	     (start-warnings *compiler-warning-count*)
 	     (start-notes *compiler-note-count*)
 	     (*lexical-environment* (make-null-environment))
-	     (form `#',(get-lambda-to-compile definition))
+	     ;; From Helmut Eller: ... we don't need the
+	     ;; lambda-expression. To quote the CLHS entry for
+	     ;; compile:
+	     ;;
+	     ;;   If the definition is already a compiled function,
+	     ;;   compile either produces that function itself (i.e.,
+	     ;;   is an identity operation) or an equivalent function.
+	     (form (etypecase definition
+		     ((or cons eval:interpreted-function)
+		      `#',(get-lambda-to-compile definition))
+		     (function `',definition)))
 	     (*source-info* (make-lisp-source-info form))
 	     (*top-level-lambdas* ())
 	     (*converting-for-interpreter* nil)



More information about the cmucl-commit mailing list