From: Stephen Adams Date: Thu, 1 Dec 1994 19:01:09 +0000 (+0000) Subject: Fixed in PARSE-OBJECT/STRING-QUOTE to make it behave better when X-Git-Tag: 20090517-FFI~6912 X-Git-Url: https://birchwood-abbey.net/git?a=commitdiff_plain;h=b43d267498345adce8281be689b049c3f080406f;p=mit-scheme.git Fixed in PARSE-OBJECT/STRING-QUOTE to make it behave better when 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. --- diff --git a/v7/src/runtime/parse.scm b/v7/src/runtime/parse.scm index f0bb1d73e..b0e915f16 100644 --- a/v7/src/runtime/parse.scm +++ b/v7/src/runtime/parse.scm @@ -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))