diff --git a/ansi-tests/flet.lsp b/ansi-tests/flet.lsp index aee24b60ca23d87dcca75bd7e5408ed196dff7c5..3bfa919ed232f64cb91fbaccd7da09504d04a72c 100644 --- a/ansi-tests/flet.lsp +++ b/ansi-tests/flet.lsp @@ -478,3 +478,29 @@ y)) (%f)))) :good) + +(deftest flet.64 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (flet () (declare (special x))) + x)) + :good) + +(deftest flet.65 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (flet ((%f () (declare (special x))))) + x)) + :good) + +(deftest flet.66 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (flet ((%f () (declare (special x)))) + x))) + :good) + + \ No newline at end of file diff --git a/ansi-tests/labels.lsp b/ansi-tests/labels.lsp index 8a80dfecbba7acf4d1aface4d9bda7851ee3a10a..89bc337a0eb293521cbb561432ae1c351d00465f 100644 --- a/ansi-tests/labels.lsp +++ b/ansi-tests/labels.lsp @@ -320,4 +320,26 @@ (%f)))) :good) +(deftest labels.43 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (labels () (declare (special x))) + x)) + :good) +(deftest labels.44 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (labels ((%f () (declare (special x))))) + x)) + :good) + +(deftest labels.45 + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) + (labels ((%f () (declare (special x)))) + x))) + :good) diff --git a/ansi-tests/let.lsp b/ansi-tests/let.lsp index 9345ca1fbdd57450aaa4ff9810d71ff72e834a71..3a63c7fc4d3bc7388122a59bbb03d493cc2f30c5 100644 --- a/ansi-tests/let.lsp +++ b/ansi-tests/let.lsp @@ -89,7 +89,7 @@ ;;; Tests of large number of LET variables (deftest let.14 - (let* ((n 1000) + (let* ((n 100) (vars (mapcar #'gensym (make-list n :initial-element "G"))) (expr `(let ,(let ((i 0)) (mapcar #'(lambda (v) (list v (incf i))) vars)) @@ -130,6 +130,27 @@ y))) :good) +(deftest let.17a + (funcall + (compile + nil + '(lambda () + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) ;; lexical binding + (let ((y x)) + (declare (special x)) ;; free declaration + y)))))) + :good) + +(deftest let.18 + (let ((foo 'special)) + (declare (special foo)) + (let ((foo 'lexical)) + (locally (declare (special foo))) + foo)) + lexical) + ;;; Tests for LET* (deftest let*.1 @@ -208,7 +229,7 @@ ;;; Tests of large number of LET* variables (deftest let*.14 - (let* ((n 1000) + (let* ((n 100) (vars (mapcar #'gensym (make-list n :initial-element "G"))) (expr `(let* ,(let ((i 0)) (mapcar #'(lambda (v) (list v (incf i))) vars)) @@ -249,3 +270,37 @@ y))) :good) +(deftest let*.17a + (funcall + (compile + nil + '(lambda () + (let ((x :bad)) + (declare (special x)) + (let ((x :good)) ;; lexical binding + (let* ((y x)) + (declare (special x)) ;; free declaration + y)))))) + :good) + +(deftest let*.18 + (let ((x :bad1) + (z :bad2)) + (declare (special x z)) + (let ((x :good) + (z :good)) ;; lexical bindings + (let* ((y x) + (w z)) + (declare (special x)) ;; free declaration + (values y w)))) + :good + :good) + +(deftest let*.19 + (let ((foo 'special)) + (declare (special foo)) + (let* ((foo 'lexical)) + (locally (declare (special foo))) + foo)) + lexical) +