From c614e496a22086f6aa1a747e4bef883c74b8a597 Mon Sep 17 00:00:00 2001 From: William Harold Newman Date: Sat, 3 Nov 2001 20:45:15 +0000 Subject: [PATCH] 0.pre7.85: verified that LAMBDA-NAME isn't just for debugging, but can break the compiler, too:-( --- BUGS | 20 ++++++++++++++++++++ src/compiler/main.lisp | 3 ++- src/compiler/node.lisp | 5 +++++ version.lisp-expr | 2 +- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/BUGS b/BUGS index 0f7be61..87e1f35 100644 --- a/BUGS +++ b/BUGS @@ -1208,6 +1208,26 @@ Error in function C::GET-LAMBDA-TO-COMPILE: (bar x))) shouldn't compile without error (because of the extra DEFMACRO symbol). +130: + reported by Alexey Dejneka on sbcl-devel 2001-11-03 + (defun x (x) + "Return X if X is a non-negative integer." + (let ((step (lambda (%funcall) + (lambda (n) + (cond ((= n 0) 0) + (t (1+ (funcall %funcall (1- n))))))))) + (funcall + ((lambda (a) + (funcall step (lambda (n) + (funcall (funcall a a) n)))) + (lambda (a) + (funcall step (lambda (n) + (funcall (funcall a a) n))))) + x))) + This function returns its argument. But after removing percents it + does not work: "Result of (1- n) is not a function". + + KNOWN BUGS RELATED TO THE IR1 INTERPRETER (Now that the IR1 interpreter has gone away, these should be diff --git a/src/compiler/main.lisp b/src/compiler/main.lisp index a39204f..aba6d58 100644 --- a/src/compiler/main.lisp +++ b/src/compiler/main.lisp @@ -860,7 +860,8 @@ (format nil "~S initial component" name)) (setf (component-kind component) :initial) (let* ((locall-fun (ir1-convert-lambda definition - (format nil "locall ~S" name))) + (let ((*package* *keyword-package*)) + (format nil "locall ~S" name)))) (fun (ir1-convert-lambda (make-xep-lambda locall-fun) name))) (setf (functional-entry-function fun) locall-fun (functional-kind fun) :external diff --git a/src/compiler/node.lisp b/src/compiler/node.lisp index d17e0b0..d3e7d5f 100644 --- a/src/compiler/node.lisp +++ b/src/compiler/node.lisp @@ -587,6 +587,11 @@ ;; GLOBAL-VAR, this is the symbol name of the variable. In a ;; functional that is from a DEFUN, this is the defined name. In ;; other functionals, this is a descriptive string. + ;; + ;; KLUDGE: Note that at least for LAMBDA-VARs, this is important not + ;; just for debugging but for ordinary compilation as well. In + ;; particular, in RECOGNIZE-KNOWN-CALL function calls are compiled + ;; differently based on the LEAF-NAME. (name nil :type t) ;; the type which values of this leaf must have (type *universal-type* :type ctype) diff --git a/version.lisp-expr b/version.lisp-expr index 229db6c..f1c41c5 100644 --- a/version.lisp-expr +++ b/version.lisp-expr @@ -18,4 +18,4 @@ ;;; for internal versions, especially for internal versions off the ;;; main CVS branch, it gets hairier, e.g. "0.pre7.14.flaky4.13".) -"0.pre7.84" +"0.pre7.85" -- 1.7.10.4