summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark H Weaver <mhw@netris.org>2013-08-22 09:26:32 -0400
committerMark H Weaver <mhw@netris.org>2013-08-22 09:26:32 -0400
commit5dea94f166a99b84666d01524aa1c62369d385d5 (patch)
treeca00174400160966d4c2967ccd2357735430df2c
parente41379034b93678f2f051685a5f4dfba2ddcf997 (diff)
downloadguile-5dea94f166a99b84666d01524aa1c62369d385d5.tar.gz
Add 'letconst' sugar to CPS serialization format.
* module/language/cps.scm (parse-cps, unparse-cps): Support 'letconst'.
-rw-r--r--module/language/cps.scm9
1 files changed, 9 insertions, 0 deletions
diff --git a/module/language/cps.scm b/module/language/cps.scm
index 7d196ee3c..faf6ad734 100644
--- a/module/language/cps.scm
+++ b/module/language/cps.scm
@@ -232,6 +232,11 @@
(and (pair? props) props)))
(match exp
;; Continuations.
+ (('letconst k (name sym c) body)
+ (build-cps-term
+ ($letk ((k (src exp) ($kargs (name) (sym)
+ ,(parse-cps body))))
+ ($continue k ($const c)))))
(('let k (name sym val) body)
(build-cps-term
($letk ((k (src exp) ($kargs (name) (sym)
@@ -286,6 +291,10 @@
(define (unparse-cps exp)
(match exp
;; Continuations.
+ (($ $letk (($ $cont k src ($ $kargs (name) (sym) body)))
+ ($ $continue k ($ $const c)))
+ `(letconst ,k (,name ,sym ,c)
+ ,(unparse-cps body)))
(($ $letk (($ $cont k src ($ $kargs (name) (sym) body))) val)
`(let ,k (,name ,sym ,(unparse-cps val))
,(unparse-cps body)))