From 6ace99f5bbbd969148b0b40fd850265df7e28d78 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 3 Jun 2020 18:52:59 -0400 Subject: [PATCH] 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