summaryrefslogtreecommitdiff
path: root/module
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2013-11-24 13:59:18 +0100
committerAndy Wingo <wingo@pobox.com>2013-11-25 20:07:53 +0100
commit7338a49fa19311adc0eb00d6752235d6af8b3751 (patch)
treeac1c984e5e1f25e9dcf88151baabdbf9b0efc670 /module
parent22d425ec551f265a8c700d224c3d0953a98b14bf (diff)
downloadguile-7338a49fa19311adc0eb00d6752235d6af8b3751.tar.gz
Compute-contification also visits body
* module/language/cps/contification.scm (compute-contification): If we decide to contify, don't forget to visit the body. Should make contification converge faster.
Diffstat (limited to 'module')
-rw-r--r--module/language/cps/contification.scm9
1 files changed, 6 insertions, 3 deletions
diff --git a/module/language/cps/contification.scm b/module/language/cps/contification.scm
index 7a9252e95..d78a4b40d 100644
--- a/module/language/cps/contification.scm
+++ b/module/language/cps/contification.scm
@@ -219,8 +219,9 @@
(($ $cont _ ($ $kclause arity body))
...))))
...)
- (unless (contify-funs term-k sym self tail-k arity body)
- (for-each visit-fun fun)))))))
+ (if (contify-funs term-k sym self tail-k arity body)
+ (for-each (cut for-each visit-cont <>) body)
+ (for-each visit-fun fun)))))))
(visit-term body term-k)
(for-each visit-component
(split-components (map list names syms funs))))
@@ -234,7 +235,9 @@
(if (and=> (bound-symbol k)
(lambda (sym)
(contify-fun term-k sym self tail-k arity body)))
- (elide-function! k (lookup-cont k cont-table))
+ (begin
+ (elide-function! k (lookup-cont k cont-table))
+ (for-each visit-cont body))
(visit-fun exp)))
(_ #t)))))