about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog15
-rw-r--r--src/guile/skribilo/skribe/api.scm9
2 files changed, 20 insertions, 4 deletions
diff --git a/ChangeLog b/ChangeLog
index 612526e..2119c85 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,21 @@
 # arch-tag: automatic-ChangeLog--lcourtes@laas.fr--2005-mobile/skribilo--devel--1.2
 #
 
+2006-07-12 16:28:29 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-58
+
+    Summary:
+      Made `parse-list-of' tail-recursive.
+    Revision:
+      skribilo--devel--1.2--patch-58
+
+    * src/guile/skribilo/skribe/api.scm (parse-list-of): Made tail-recursive,
+      thereby fixing potential stack overflows (e.g., when building the user
+      manual) and perhaps slightly improving performance.
+
+    modified files:
+     ChangeLog src/guile/skribilo/skribe/api.scm
+
+
 2006-04-23 17:28:14 GMT	Ludovic Courtes <ludovic.courtes@laas.fr>	patch-52
 
     Summary:
diff --git a/src/guile/skribilo/skribe/api.scm b/src/guile/skribilo/skribe/api.scm
index 2cd8b2e..2a4d0ae 100644
--- a/src/guile/skribilo/skribe/api.scm
+++ b/src/guile/skribilo/skribe/api.scm
@@ -551,12 +551,13 @@
 	    (null? (cdr lst)))
        (parse-list-of for markup (car lst)))
       (else
-       (let loop ((lst lst))
+       (let loop ((lst lst)
+		  (result '()))
 	  (cond
 	     ((null? lst)
-	      '())
+	      (reverse! result))
 	     ((pair? (car lst))
-	      (loop (car lst)))
+	      (loop (car lst) result))
 	     (else
 	      (let ((r (car lst)))
 		 (if (not (is-markup? r markup))
@@ -567,7 +568,7 @@
 						 (markup-markup r)
 						 (find-runtime-type r))
 					     markup)))
-		 (cons r (loop (cdr lst))))))))))
+		 (loop (cdr lst) (cons r result)))))))))
 
 ;*---------------------------------------------------------------------*/
 ;*    itemize ...                                                      */