guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 04/05: Better CPS conversion for tests in tests


From: Andy Wingo
Subject: [Guile-commits] 04/05: Better CPS conversion for tests in tests
Date: Sun, 03 Jan 2016 17:32:56 +0000

wingo pushed a commit to branch master
in repository guile.

commit fb2f7b4e5fc50c3cf42d4d4906060bd99d56cb05
Author: Andy Wingo <address@hidden>
Date:   Sun Jan 3 18:18:51 2016 +0100

    Better CPS conversion for tests in tests
    
    * module/language/tree-il/compile-cps.scm (convert): Tests in tests have
      their consequents and alternates also converted in test context.
---
 module/language/tree-il/compile-cps.scm |   11 +++++++++--
 1 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/module/language/tree-il/compile-cps.scm 
b/module/language/tree-il/compile-cps.scm
index 5fa6010..419cb33 100644
--- a/module/language/tree-il/compile-cps.scm
+++ b/module/language/tree-il/compile-cps.scm
@@ -773,7 +773,7 @@
            (build-term ($continue k src ($primcall 'apply args*)))))))
 
     (($ <conditional> src test consequent alternate)
-     (define (convert-test cps kt kf)
+     (define (convert-test cps test kt kf)
        (match test
          (($ <primcall> src (? branching-primitive? name) args)
           (convert-args cps args
@@ -781,6 +781,13 @@
               (with-cps cps
                 (build-term ($continue kf src
                               ($branch kt ($primcall name args))))))))
+         (($ <conditional> src test consequent alternate)
+          (with-cps cps
+            (let$ t (convert-test consequent kt kf))
+            (let$ f (convert-test alternate kt kf))
+            (letk kt* ($kargs () () ,t))
+            (letk kf* ($kargs () () ,f))
+            ($ (convert-test test kt* kf*))))
          (_ (convert-arg cps test
               (lambda (cps test)
                 (with-cps cps
@@ -791,7 +798,7 @@
        (let$ f (convert alternate k subst))
        (letk kt ($kargs () () ,t))
        (letk kf ($kargs () () ,f))
-       ($ (convert-test kt kf))))
+       ($ (convert-test test kt kf))))
 
     (($ <lexical-set> src name gensym exp)
      (convert-arg cps exp



reply via email to

[Prev in Thread] Current Thread [Next in Thread]