diff --git a/src/cmp/cmpspecial.lsp b/src/cmp/cmpspecial.lsp index 7dc2f3d10..82d2441c2 100644 --- a/src/cmp/cmpspecial.lsp +++ b/src/cmp/cmpspecial.lsp @@ -85,9 +85,13 @@ (cmpck (endp (cdr fun)) "The lambda expression ~s is illegal." fun) (let (name body) - (if (eq (first fun) 'EXT::LAMBDA) - (setf name (gensym) body (rest fun)) - (setf name (second fun) body (cddr fun))) + (if (eq (first fun) 'lambda) + (let ((decl (si::process-declarations (cddr fun)))) + (setf name (or (function-block-name-declaration decl) + (gensym "LAMBDA")) + body (rest fun))) + (setf name (second fun) + body (cddr fun))) (c1expr `(flet ((,name ,@body)) #',name)))) (t (cmperr "The function ~s is illegal." fun))))) diff --git a/src/lsp/evalmacros.lsp b/src/lsp/evalmacros.lsp index 1e17bab1b..98b2453b6 100644 --- a/src/lsp/evalmacros.lsp +++ b/src/lsp/evalmacros.lsp @@ -162,9 +162,11 @@ terminated by a non-local exit." (defmacro lambda-block (name lambda-list &rest lambda-body) (multiple-value-bind (decl body doc) (si::process-declarations lambda-body) - (when decl (setq decl (list (cons 'declare decl)))) - `(lambda ,lambda-list ,@doc ,@decl - (block ,(si::function-block-name name) ,@body)))) + (let ((decl (and decl (list (cons 'declare decl)))) + (block-name (si:function-block-name name))) + `(lambda ,lambda-list ,@doc ,@decl + (declare (si::function-block-name ,block-name)) + (block ,block-name ,@body))))) ; assignment