cmp: for LAMBDA use an associated function-block-name
That makes lambda with a declaration si:function-block-name behave consistently with ext:lambda-block (and in eval-macros ext:lambda-block expands to have this declaration too to behave in turn consistently with how the compiler treats ext:lambda-block).
This commit is contained in:
parent
4d9b72a88b
commit
f9db80dcbf
2 changed files with 12 additions and 6 deletions
|
|
@ -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)))))
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue