diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/string.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/string.rkt index 04f2d25955..eb09388894 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/string.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/string.rkt @@ -7,32 +7,17 @@ (types abbrev) (optimizer utils logging)) -(provide string-opt-expr string-expr bytes-expr) +(provide string-opt-expr) + +(define-unsafe-syntax-class string-length) +(define-unsafe-syntax-class bytes-length) -(define-syntax-class string-expr - #:commit - (pattern e:expr - #:when (isoftype? #'e -String) - #:with opt ((optimize) #'e))) -(define-syntax-class bytes-expr - #:commit - (pattern e:expr - #:when (isoftype? #'e -Bytes) - #:with opt ((optimize) #'e))) (define-syntax-class string-opt-expr #:commit - (pattern (#%plain-app (~and op (~literal string-length)) s:string-expr) - #:with opt - (begin (log-optimization "string-length" - "String check elimination." - this-syntax) - (add-disappeared-use #'op) - #'(unsafe-string-length s.opt))) - (pattern (#%plain-app (~and op (~literal bytes-length)) s:bytes-expr) - #:with opt - (begin (log-optimization "bytes-length" - "Byte string check elimination." - this-syntax) - (add-disappeared-use #'op) - #'(unsafe-bytes-length s.opt)))) + (pattern (#%plain-app op:string-length^ s:opt-expr) + #:do [(log-opt "string-length" "String check elimination.")] + #:with opt #'(op.unsafe s.opt)) + (pattern (#%plain-app op:bytes-length^ s:opt-expr) + #:do [(log-opt "bytes-length" "Byte string check elimination.")] + #:with opt #'(op.unsafe s.opt)))