Fixed in PARSE-OBJECT/STRING-QUOTE to make it behave better when
authorStephen Adams <edu/mit/csail/zurich/adams>
Thu, 1 Dec 1994 19:01:09 +0000 (19:01 +0000)
committerStephen Adams <edu/mit/csail/zurich/adams>
Thu, 1 Dec 1994 19:01:09 +0000 (19:01 +0000)
reading large strings with escapes.  Removed recursion and to reduced
consing by doing a single string-append at the end rather than one per
escape.

Desirable for 7.3 release.

v7/src/runtime/parse.scm

index f0bb1d73e73ddbb5ab465c239b268b808eebcb65..b0e915f160240189609560092c73fa530b07983d 100644 (file)
@@ -1,6 +1,6 @@
 #| -*-Scheme-*-
 
-$Id: parse.scm,v 14.25 1994/03/24 18:24:01 gjr Exp $
+$Id: parse.scm,v 14.26 1994/12/01 19:01:09 adams Exp $
 
 Copyright (c) 1988-94 Massachusetts Institute of Technology
 
@@ -504,10 +504,12 @@ MIT in each case. |#
 
 (define-accretor (parse-object/string-quote)
   (discard-char)
-  (let loop ()
+  (let loop ((fragments '()))
     (let ((head (read-string char-set/string-delimiters)))
       (if (char=? #\" (read-char))
-         head
+         (if (null? fragments)
+             head
+             (apply string-append (reverse! (cons head fragments))))
          (let ((char
                 (let ((char (read-char)))
                   (cond ((char-ci=? char #\n) #\Newline)
@@ -521,9 +523,7 @@ MIT in each case. |#
                          (let ((c2 (read-char)))
                            (octal->char char c2 (read-char))))
                         (else char)))))
-           (string-append head
-                          (string char)
-                          (loop)))))))
+           (loop (cons* (string char) head fragments)))))))
 
 (define (octal->char c1 c2 c3)
   (let ((d1 (char->digit c1 8))