From a758111aadaede0f90b1ef75177dfd963d690873 Mon Sep 17 00:00:00 2001 From: Justin Ethier Date: Wed, 26 Jul 2017 14:52:03 +0000 Subject: [PATCH] Issue #207 - Added constant folding --- scheme/cyclone/cps-optimizations.sld | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/scheme/cyclone/cps-optimizations.sld b/scheme/cyclone/cps-optimizations.sld index a328831b..371da631 100644 --- a/scheme/cyclone/cps-optimizations.sld +++ b/scheme/cyclone/cps-optimizations.sld @@ -10,6 +10,7 @@ ;(define-library (cps-optimizations) ;; For debugging via local unit tests (define-library (scheme cyclone cps-optimizations) (import (scheme base) + (scheme eval) (scheme cyclone util) (scheme cyclone ast) (scheme cyclone primitives) @@ -700,9 +701,18 @@ opt:contract (reverse new-args))))) (else - (cons - fnc - (map (lambda (e) (opt:contract e)) (cdr exp))))))) + (let ((result + (cons + fnc + (map (lambda (e) (opt:contract e)) (cdr exp))))) + (if (and (prim-call? exp) + (precompute-prim-app? result)) + (with-handler + (lambda (err) result) + ;; TODO: not good enough does not handler Cyc-fast-plus and friends + (eval result)) + result)) + )))) (else (error "CPS optimize [1] - Unknown expression" exp))))