From 41f2092953ea2999c72921ce435887a7636559f0 Mon Sep 17 00:00:00 2001 From: Eric Dobson Date: Fri, 30 Aug 2013 08:25:10 -0700 Subject: [PATCH] Cleanup apply.rkt --- .../typed-racket/optimizer/apply.rkt | 36 +++++++++---------- 1 file changed, 17 insertions(+), 19 deletions(-) diff --git a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/apply.rkt b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/apply.rkt index a90dda3003..3e52a69d98 100644 --- a/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/apply.rkt +++ b/pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/apply.rkt @@ -1,36 +1,34 @@ #lang racket/base (require syntax/parse racket/syntax - (for-template racket/unsafe/ops racket/base (prefix-in k: '#%kernel)) + (for-template racket/unsafe/ops racket/base (prefix-in k- '#%kernel)) "../utils/utils.rkt" (utils tc-utils) (optimizer utils logging)) (provide apply-opt-expr) +(define-literal-syntax-class +) +(define-literal-syntax-class *) +(define-literal-syntax-class k-apply) +(define-literal-syntax-class map) +(define-literal-syntax-class app^ (#%plain-app)) + + (define-syntax-class apply-op #:commit - #:literals (+ *) - (pattern + #:with identity #'0) - (pattern * #:with identity #'1)) + (pattern :+^ #:with identity #'0) + (pattern :*^ #:with identity #'1)) (define-syntax-class apply-opt-expr #:commit - #:literals (k:apply map #%plain-app #%app) - (pattern ((~and kw #%plain-app) (~and appl k:apply) op:apply-op - ((~and kw2 #%plain-app) (~and m map) f l)) - #:with opt (with-syntax ([(f* lp v lst) (map generate-temporary '(f* loop v lst))] - [l ((optimize) #'l)] - [f ((optimize) #'f)]) - (log-optimization "apply-map" "apply-map deforestation." - this-syntax) - (add-disappeared-use #'appl) - (add-disappeared-use #'kw2) - (add-disappeared-use #'m) + (pattern (kw:app^ appl:k-apply^ op:apply-op (kw2:app^ m:map^ f:opt-expr l:opt-expr)) + #:do [(log-opt "apply-map" "apply-map deforestation.")] + #:with opt (with-syntax ([(f* lp v lst) (map generate-temporary '(f* loop v lst))]) (syntax/loc/origin this-syntax #'kw - (let ([f* f]) - (let lp ([v op.identity] [lst l]) + (let ([f* f.opt]) + (let loop ([v op.identity] [lst l.opt]) (if (null? lst) v - (lp (op v (f* (unsafe-car lst))) - (unsafe-cdr lst))))))))) + (loop (op v (f* (unsafe-car lst))) + (unsafe-cdr lst)))))))))