Raymond Toy pushed to branch master at cmucl / cmucl
Commits:
-
be8cb5d0
by Tarn W. Burton at 2023-02-21T07:48:12-05:00
-
0d3cbc39
by Raymond Toy at 2023-02-21T23:25:27+00:00
2 changed files:
Changes:
| ... | ... | @@ -399,7 +399,8 @@ |
| 399 | 399 | (form new-directives)
|
| 400 | 400 | (expand-directive (car remaining-directives)
|
| 401 | 401 | (cdr remaining-directives))
|
| 402 | - (push form results)
|
|
| 402 | + (when form
|
|
| 403 | + (push form results))
|
|
| 403 | 404 | (setf remaining-directives new-directives)))
|
| 404 | 405 | (reverse results)))
|
| 405 | 406 |
| ... | ... | @@ -113,3 +113,16 @@ |
| 113 | 113 | |
| 114 | 114 | (define-test sub-output-integer.1
|
| 115 | 115 | (assert-prints "-536870912" (princ most-negative-fixnum)))
|
| 116 | + |
|
| 117 | +;;; Simple LOOP requires only compound forms. Hence NIL is not
|
|
| 118 | +;;; permitted. Some FORMAT directives (like newline) return NIL
|
|
| 119 | +;;; as the form when they have nothing to add to the body.
|
|
| 120 | +;;; Normally this is fine since BLOCK accepts NIL as a form. On
|
|
| 121 | +;;; the other hand, when the newline directive is inside of an
|
|
| 122 | +;;; iteration directive this will produce something like
|
|
| 123 | +;;; (LOOP (fu) nil (bar)) which is not acceptable. To verify
|
|
| 124 | +;;; that this is not happening we make sure we are not getting
|
|
| 125 | +;;; (BLOCK NIL NIL) since this is easier to test for.
|
|
| 126 | +(define-test format-no-nil-form.1
|
|
| 127 | + (assert-equal '(block nil) (third (second (macroexpand-1 '(formatter "~
|
|
| 128 | +")))))) |