From fb54796d53760b549f414afea7c7834ea400a2aa Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Tue, 18 Oct 2016 03:08:37 -0400 Subject: [PATCH] Optimize certain assoc and member function calls --- scheme/cyclone/transforms.sld | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/scheme/cyclone/transforms.sld b/scheme/cyclone/transforms.sld index cc183432..6530604d 100644 --- a/scheme/cyclone/transforms.sld +++ b/scheme/cyclone/transforms.sld @@ -1088,7 +1088,21 @@ (append a-lookup defines-a-lookup renamed)) (map (lambda (p) (cdr p)) defines-a-lookup))))) ((app? ast) - (map (lambda (a) (convert a renamed)) ast)) + (cond + ;; Special case, convert these to primitives if possible + ((and (eq? (car ast) 'member) + (not (assoc (car ast) renamed)) + (= (length ast) 3)) + (cons 'Cyc-fast-member + (map (lambda (a) (convert a renamed)) (cdr ast)))) + ((and (eq? (car ast) 'assoc) + (not (assoc (car ast) renamed)) + (= (length ast) 3)) + (cons 'Cyc-fast-assoc + (map (lambda (a) (convert a renamed)) (cdr ast)))) + ;; Regular case, alpha convert everything + (else + (map (lambda (a) (convert a renamed)) ast)))) (else (error "unhandled expression: " ast))))