diff --git a/src/cmp/cmpenv.lsp b/src/cmp/cmpenv.lsp index 2e94b60ae..a17dddb79 100644 --- a/src/cmp/cmpenv.lsp +++ b/src/cmp/cmpenv.lsp @@ -269,11 +269,12 @@ (warn "The variable name ~s is not a symbol." var)))) (defun c1body (body doc-p &aux + (all-declarations nil) (ss nil) ; special vars (is nil) ; ignored vars (ts nil) ; typed vars (var . type) (others nil) ; all other vars - doc form) + doc form) (loop (when (endp body) (return)) (setq form (cmp-macroexpand (car body))) @@ -282,6 +283,7 @@ (when (or (null doc-p) (endp (cdr body)) doc) (return)) (setq doc form)) ((and (consp form) (eq (car form) 'DECLARE)) + (push form all-declarations) (dolist (decl (cdr form)) (cmpck (or (not (consp decl)) (not (symbolp (car decl)))) "The declaration ~s is illegal." (cons form decl)) @@ -343,7 +345,7 @@ (t (return))) (pop body) ) - (values body ss ts is others doc) + (values body ss ts is others doc all-declarations) ) (defun c1add-declarations (decls &aux (dl nil)) diff --git a/src/cmp/cmplam.lsp b/src/cmp/cmplam.lsp index 951cdcf20..aff349bd3 100644 --- a/src/cmp/cmplam.lsp +++ b/src/cmp/cmplam.lsp @@ -134,7 +134,7 @@ (cmpck (endp lambda-expr) "The lambda expression ~s is illegal." (cons 'LAMBDA lambda-expr)) - (multiple-value-setq (body ss ts is other-decls doc) + (multiple-value-setq (body ss ts is other-decls doc all-declarations) (c1body (cdr lambda-expr) t)) (when block-it (setq body (list (cons 'BLOCK (cons block-name body))))) @@ -193,7 +193,7 @@ (let ((var (first specs)) (init (second specs))) (setq let (cons (if init (list var init) var) let)))) - (setq body `((let* ,(nreverse let) (declare ,@other-decls) ,@body))))) + (setq body `((let* ,(nreverse let) ,@all-declarations ,@body))))) (let ((new-vars (ldiff *vars* old-vars))) (setq body (c1decl-body other-decls body))