From 6ace99f5bbbd969148b0b40fd850265df7e28d78 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 3 Jun 2020 18:52:59 -0400 Subject: [PATCH 1/3] Issue #369 - Switch out inline string cmp ops --- scheme/base.sld | 28 ++++++++++++++++------------ scheme/cyclone/transforms.sld | 20 ++++++++++---------- 2 files changed, 26 insertions(+), 22 deletions(-) diff --git a/scheme/base.sld b/scheme/base.sld index 6b0909c2..fffe4d71 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -72,6 +72,11 @@ string<=? string>? string>=? + fast-string=? + fast-string? + fast-string>=? foldl foldr not @@ -220,11 +225,11 @@ zero? list? not - string>=? - string>? - string<=? - string=? + fast-string>? + fast-string<=? + fast-string? str1 str2) (> (string-cmp str1 str2) 0)) (define (string>=? str1 str2) (>= (string-cmp str1 str2) 0)) -; ; TODO: generalize to multiple arguments: (define (string?-2 str1 str2) (> (string-cmp str1 str2) 0)) -; (define (string>=?-2 str1 str2) (>= (string-cmp str1 str2) 0)) - + (define (fast-string=? str1 str2) (equal? (string-cmp str1 str2) 0)) + (define (fast-string? str1 str2) (> (string-cmp str1 str2) 0)) + (define (fast-string>=? str1 str2) (>= (string-cmp str1 str2) 0)) (define (member-helper obj lst cmp-proc) (cond diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index 2f76a7dc..8cea6baa 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -1133,16 +1133,16 @@ if (acc) { (cons 'write-string-1 (map (lambda (a) (convert a renamed)) (cdr ast)))) ((and (eq? (car ast) 'write-string) (= (length ast) 3)) (cons 'write-string-2 (map (lambda (a) (convert a renamed)) (cdr ast)))) - ;((and (eq? (car ast) 'string>=?) (= (length ast) 3)) - ; (cons 'string>=?-2 (map (lambda (a) (convert a renamed)) (cdr ast)))) - ;((and (eq? (car ast) 'string>?) (= (length ast) 3)) - ; (cons 'string>?-2 (map (lambda (a) (convert a renamed)) (cdr ast)))) - ;((and (eq? (car ast) 'string<=?) (= (length ast) 3)) - ; (cons 'string<=?-2 (map (lambda (a) (convert a renamed)) (cdr ast)))) - ;((and (eq? (car ast) 'string=?) (= (length ast) 3)) + (cons 'fast-string>=? (map (lambda (a) (convert a renamed)) (cdr ast)))) + ((and (eq? (car ast) 'string>?) (= (length ast) 3)) + (cons 'fast-string>? (map (lambda (a) (convert a renamed)) (cdr ast)))) + ((and (eq? (car ast) 'string<=?) (= (length ast) 3)) + (cons 'fast-string<=? (map (lambda (a) (convert a renamed)) (cdr ast)))) + ((and (eq? (car ast) 'string Date: Wed, 3 Jun 2020 19:08:23 -0400 Subject: [PATCH 2/3] Added stub --- scheme/base.sld | 1 + 1 file changed, 1 insertion(+) diff --git a/scheme/base.sld b/scheme/base.sld index fffe4d71..acead90f 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -607,6 +607,7 @@ ; ; TODO: generalize to multiple arguments: (define (string Date: Thu, 4 Jun 2020 22:48:17 -0400 Subject: [PATCH 3/3] Issue #369 - Switch over to multi-arg string cmp --- scheme/base.sld | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/scheme/base.sld b/scheme/base.sld index acead90f..ced2bb93 100644 --- a/scheme/base.sld +++ b/scheme/base.sld @@ -605,14 +605,12 @@ (define (char>=? c1 c2 . cs) (Cyc-bin-op-char >= c1 (cons c2 cs))) ; TODO: char-ci predicates (in scheme/char library) + (define (string=? str1 str2 . strs) (Cyc-bin-op fast-string=? str1 (cons str2 strs))) + (define (string? str1 str2 . strs) (Cyc-bin-op fast-string>? str1 (cons str2 strs))) + (define (string>=? str1 str2 . strs) (Cyc-bin-op fast-string>=? str1 (cons str2 strs))) -; ; TODO: generalize to multiple arguments: (define (string? str1 str2) (> (string-cmp str1 str2) 0)) - (define (string>=? str1 str2) (>= (string-cmp str1 str2) 0)) (define (fast-string=? str1 str2) (equal? (string-cmp str1 str2) 0)) (define (fast-string