diff options
author | Andy Wingo <wingo@pobox.com> | 2023-07-04 11:01:50 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2023-08-17 14:16:12 +0200 |
commit | 0922cbebb931e9a5c5408c55105af01f17e6a18c (patch) | |
tree | 922ca5dfa34d6281355e4891b88a2b402999a9a2 /module/language/cps | |
parent | 78948ae594ced45e3a5cd3a7bf0c3f4397ac9b16 (diff) | |
download | guile-0922cbebb931e9a5c5408c55105af01f17e6a18c.tar.gz |
Include nfree in closure-ref, closure-set primcall params
* module/language/cps/closure-conversion.scm (convert-one): Add nfree to
the param. This will help the wasm target.
* module/language/cps/effects-analysis.scm (closure-ref, closure-set!):
* module/language/cps/lower-primcalls.scm (closure-ref,closure-set!):
Adapt.
Diffstat (limited to 'module/language/cps')
-rw-r--r-- | module/language/cps/closure-conversion.scm | 4 | ||||
-rw-r--r-- | module/language/cps/effects-analysis.scm | 8 | ||||
-rw-r--r-- | module/language/cps/guile-vm/lower-primcalls.scm | 4 |
3 files changed, 10 insertions, 6 deletions
diff --git a/module/language/cps/closure-conversion.scm b/module/language/cps/closure-conversion.scm index 7152ca589..cc337467f 100644 --- a/module/language/cps/closure-conversion.scm +++ b/module/language/cps/closure-conversion.scm @@ -520,7 +520,7 @@ Otherwise @var{var} is bound, so @var{k} is called with @var{var}." (ref (cond ((not self-known?) (build-exp - ($primcall 'closure-ref idx (self)))) + ($primcall 'closure-ref `(,idx . ,nfree) (self)))) ((= nfree 2) (build-exp ($primcall (match idx (0 'car) (1 'cdr)) #f @@ -622,7 +622,7 @@ bound to @var{closure}, and continue to @var{k}." ((not known?) (lambda (idx val) (build-exp - ($primcall 'closure-set! idx (closure val))))) + ($primcall 'closure-set! `(,idx . ,count) (closure val))))) ((= count 2) (lambda (idx val) (match idx diff --git a/module/language/cps/effects-analysis.scm b/module/language/cps/effects-analysis.scm index 3e81c3eb4..e697d2e29 100644 --- a/module/language/cps/effects-analysis.scm +++ b/module/language/cps/effects-analysis.scm @@ -483,8 +483,12 @@ the LABELS that are clobbered by the effects of LABEL." ((string-set! str idx cp) (&write-object &string)) ((make-closure code) (&allocate &closure)) - ((closure-ref code) (&read-field &closure param)) - ((closure-set! code) (&write-field &closure param))) + ((closure-ref code) (match param + ((idx . nfree) + (&read-field &closure idx)))) + ((closure-set! code) (match param + ((idx . nfree) + (&write-field &closure idx))))) (define-primitive-effects* param ((allocate-words size) (&allocate (annotation->memory-kind param))) diff --git a/module/language/cps/guile-vm/lower-primcalls.scm b/module/language/cps/guile-vm/lower-primcalls.scm index 66e84ed6f..e0cf19e46 100644 --- a/module/language/cps/guile-vm/lower-primcalls.scm +++ b/module/language/cps/guile-vm/lower-primcalls.scm @@ -551,7 +551,7 @@ ($primcall 'allocate-words/immediate `(closure . ,nwords) ()))))) ;; precondition: closure is closure, idx is in range -(define-primcall-lowerer (closure-ref cps k src idx (closure)) +(define-primcall-lowerer (closure-ref cps k src (idx . nfree) (closure)) (let ((pos (+ idx 2))) (with-cps cps (build-term @@ -559,7 +559,7 @@ ($primcall 'scm-ref/immediate `(closure . ,pos) (closure))))))) ;; precondition: closure is clodure, idx is in range -(define-primcall-lowerer (closure-set! cps k src idx (closure val)) +(define-primcall-lowerer (closure-set! cps k src (idx . nfree) (closure val)) (let ((pos (+ idx 2))) (with-cps cps (build-term |