diff options
author | Andy Wingo <wingo@pobox.com> | 2015-11-11 16:30:59 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2015-11-11 16:30:59 +0100 |
commit | 92ed7f69894316247e78c29b953bb59b5c3953d7 (patch) | |
tree | 518c7ca681b7318ee7d0d6785efb629239e67070 | |
parent | 13edcf57a0e39196507bfb76fae9b35b4079e03d (diff) | |
download | guile-92ed7f69894316247e78c29b953bb59b5c3953d7.tar.gz |
Fix miscompilation of closures allocated as vectors
* module/language/cps/closure-conversion.scm (convert-one): Fix
miscompilation of vector closure initialization.
-rw-r--r-- | module/language/cps/closure-conversion.scm | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/module/language/cps/closure-conversion.scm b/module/language/cps/closure-conversion.scm index 29577a99c..c6f941db3 100644 --- a/module/language/cps/closure-conversion.scm +++ b/module/language/cps/closure-conversion.scm @@ -587,12 +587,12 @@ bound to @var{var}, and continue to @var{k}." (letk k ($kargs () () ,body)) ($ (convert-arg v (lambda (cps v) - (with-cps cps - ($ (with-cps-constants ((idx idx)) - (let ((op (cond - ((not known?) 'free-set!) - ((<= idx #xff) 'vector-set!/immediate) - (else 'vector-set!)))) + (let ((op (cond + ((not known?) 'free-set!) + ((<= idx #xff) 'vector-set!/immediate) + (else 'vector-set!)))) + (with-cps cps + ($ (with-cps-constants ((idx idx)) (build-term ($continue k src ($primcall op (var idx v)))))))))))))))))) |