diff options
Diffstat (limited to 'format.scm')
-rw-r--r-- | format.scm | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -31,6 +31,13 @@ (define format:expch #\E) ;; The character prefixing the exponent value in ~e printing. +(define format:iteration-bounded #t) +;; If #t, "~{...~}" iterates no more than format:max-iterations times; +;; if #f, there is no bound. + +(define format:max-iterations 100) +;; Compatible with previous versions. + (define format:floats (provided? 'inexact)) ;; Detects if the scheme system implements flonums (see at eof). @@ -605,7 +612,8 @@ ((colon) (if (not max-iterations) (set! max-iterations 1))) ((colon-at at) (format:error "illegal modifier")) - (else (if (not max-iterations) (set! max-iterations 100)))) + (else (if (not max-iterations) + (set! max-iterations format:max-iterations)))) (if (not (null? params)) (format:error "no parameters allowed in ~~}")) (if (zero? iteration-nest) @@ -627,7 +635,8 @@ (list-tail args arg-pos)))) (i 0 (+ i 1))) ((or (>= arg-pos args-len) - (>= i max-iterations)))))) + (and format:iteration-bounded + (>= i max-iterations))))))) ((sublists) (let ((args (next-arg)) (args-len 0)) @@ -636,7 +645,8 @@ (set! args-len (length args)) (do ((arg-pos 0 (+ arg-pos 1))) ((or (>= arg-pos args-len) - (>= arg-pos max-iterations))) + (and format:iteration-bounded + (>= arg-pos max-iterations)))) (let ((sublist (list-ref args arg-pos))) (if (not (list? sublist)) (format:error @@ -653,7 +663,8 @@ args arg-pos)))) (i 0 (+ i 1))) ((or (>= arg-pos args-len) - (>= i max-iterations)) + (and format:iteration-bounded + (>= i max-iterations))) arg-pos)))) (add-arg-pos usedup-args))) ((rest-sublists) @@ -662,7 +673,8 @@ (usedup-args (do ((arg-pos 0 (+ arg-pos 1))) ((or (>= arg-pos args-len) - (>= arg-pos max-iterations)) + (and format:iteration-bounded + (>= arg-pos max-iterations))) arg-pos) (let ((sublist (list-ref args arg-pos))) (if (not (list? sublist)) |