From 5884e77edaff1745d267b8a65a0b17f86996794b Mon Sep 17 00:00:00 2001 From: Chris Hanson Date: Wed, 22 Feb 2017 22:10:36 -0800 Subject: [PATCH] Eliminate reverse-string altogether. It's meaningless in Unicode. --- doc/ref-manual/strings.texi | 12 ------------ src/compiler/machines/C/stackify.scm | 10 ++++++---- src/edwin/edwin.pkg | 4 ---- src/runtime/runtime.pkg | 1 - src/runtime/string.scm | 15 +++++++++++---- src/runtime/ustring.scm | 10 +--------- 6 files changed, 18 insertions(+), 34 deletions(-) diff --git a/doc/ref-manual/strings.texi b/doc/ref-manual/strings.texi index c9274b07d..d4b442d6a 100644 --- a/doc/ref-manual/strings.texi +++ b/doc/ref-manual/strings.texi @@ -467,18 +467,6 @@ Returns a newly allocated string containing the same characters as replaced by @var{char2}. @end deffn -@deffn procedure reverse-string string -Returns a newly allocated string with the same characters as -@var{string} but in the reverse order. - -@example -@group -(reverse-string "foo bar baz") @result{} "zab rab oof" -(reverse-string (string-slice "foo bar baz" 4 7)) @result{} "rab" -@end group -@end example -@end deffn - @node Searching Strings, Matching Strings, Strings, Strings @section Searching Strings @cindex searching, of string diff --git a/src/compiler/machines/C/stackify.scm b/src/compiler/machines/C/stackify.scm index 85d200544..dc29a7698 100644 --- a/src/compiler/machines/C/stackify.scm +++ b/src/compiler/machines/C/stackify.scm @@ -502,10 +502,12 @@ USA. prog)) ((bit-string? obj) (build/string stackify-opcode/push-bit-string - (reverse-string - (number->string - (bit-string->unsigned-integer obj) - 16)) + (list->string + (reverse + (string->list + (number->string + (bit-string->unsigned-integer obj) + 16)))) (build/push-nat (bit-string-length obj) prog))) ((scode/primitive-procedure? obj) (let ((arity (primitive-procedure-arity obj)) diff --git a/src/edwin/edwin.pkg b/src/edwin/edwin.pkg index f1b6090c2..92d17a05e 100644 --- a/src/edwin/edwin.pkg +++ b/src/edwin/edwin.pkg @@ -166,10 +166,6 @@ USA. make-string make-vector-8b random-byte-vector - reverse-string - reverse-string! - reverse-substring - reverse-substring! set-string-length! string string->list diff --git a/src/runtime/runtime.pkg b/src/runtime/runtime.pkg index 7cfce3571..a7a8411dd 100644 --- a/src/runtime/runtime.pkg +++ b/src/runtime/runtime.pkg @@ -1031,7 +1031,6 @@ USA. (substring string-copy) list->string make-string - reverse-string string string* string->list diff --git a/src/runtime/string.scm b/src/runtime/string.scm index cde00ab1b..350ec683d 100644 --- a/src/runtime/string.scm +++ b/src/runtime/string.scm @@ -296,7 +296,7 @@ USA. (define (%bm-substring-search-backward text tstart tend pattern pstart pend) (let ((m (fix:- pend pstart)) (pend-1 (fix:- pend 1)) - (rpattern (reverse-string (string-slice pattern pstart pend)))) + (rpattern (reverse-pattern pattern pstart pend))) (let ((tstart+m (fix:+ tstart m)) (lambda* (compute-last-occurrence-function rpattern 0 m)) (gamma @@ -352,9 +352,9 @@ USA. (define (compute-good-suffix-function pattern pstart pend gamma0) (let ((m (fix:- pend pstart))) (let ((pi - (compute-prefix-function - (reverse-string (string-slice pattern pstart pend)) - 0 m)) + (compute-prefix-function (reverse-pattern pattern pstart pend) + 0 + m)) (gamma (make-vector m gamma0)) (m-1 (fix:- m 1))) (do ((l 0 (fix:+ l 1))) @@ -390,6 +390,13 @@ USA. (vector-set! pi q k) (outer k (fix:+ q 1))))) pi)) + +(define (reverse-pattern pattern pstart pend) + (let ((builder (string-builder))) + (do ((i (fix:- pend 1) (fix:- i 1))) + ((not (fix:>= i pstart))) + (builder (string-ref pattern i))) + (builder))) ;;;; Guarantors ;; diff --git a/src/runtime/ustring.scm b/src/runtime/ustring.scm index b8c2590e3..1f34cc266 100644 --- a/src/runtime/ustring.scm +++ b/src/runtime/ustring.scm @@ -830,21 +830,13 @@ USA. (define (burst-string string delimiter allow-runs?) ((string-splitter delimiter allow-runs?) string)) - + (define (string-replace string char1 char2) (guarantee bitless-char? char1 'string-replace) (guarantee bitless-char? char2 'string-replace) (string-map (lambda (char) (if (char=? char char1) char2 char)) string)) - -(define (reverse-string string) - (let ((builder (string-builder))) - (do ((i (fix:- (string-length string) 1) - (fix:- i 1))) - ((not (fix:>= i 0))) - (builder (string-ref string i))) - (builder))) (define (string-8-bit? string) (receive (string start end) (translate-slice string 0 (string-length string)) -- 2.25.1