summaryrefslogtreecommitdiffstats
path: root/format.scm
diff options
context:
space:
mode:
Diffstat (limited to 'format.scm')
-rw-r--r--format.scm22
1 files changed, 17 insertions, 5 deletions
diff --git a/format.scm b/format.scm
index 709acf7..c9e1d12 100644
--- a/format.scm
+++ b/format.scm
@@ -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))