diff --git a/module/language/cps/reify-primitives.scm b/module/language/cps/reify-primitives.scm index 52c75732f..8765ee207 100644 --- a/module/language/cps/reify-primitives.scm +++ b/module/language/cps/reify-primitives.scm @@ -237,7 +237,6 @@ (setk label ($kfun src meta self tail clause)))) (($ $kargs names vars ($ $continue k src ($ $prim name))) (with-cps cps - (let$ k (uniquify-receive k)) (let$ body (resolve-prim name k src)) (setk label ($kargs names vars ,body)))) (($ $kargs names vars @@ -380,9 +379,9 @@ (else (with-cps cps (letv proc) - (let$ k (uniquify-receive k)) + (letk krecv ($kreceive '(res) #f k)) (letk kproc ($kargs ('proc) (proc) - ($continue k src ($call proc args)))) + ($continue krecv src ($call proc args)))) (let$ body (resolve-prim name kproc src)) (setk label ($kargs names vars ,body)))))) (($ $kargs names vars diff --git a/module/language/tree-il/compile-cps.scm b/module/language/tree-il/compile-cps.scm index e690a406c..e66b09bdd 100644 --- a/module/language/tree-il/compile-cps.scm +++ b/module/language/tree-il/compile-cps.scm @@ -820,13 +820,14 @@ (build-term ($continue kprim src ($prim name)))))))))) (else ;; We have something that's a primcall for Tree-IL but not for - ;; CPS, which will get compiled as a call and so the right thing - ;; to do is to continue to the given $ktail or $kreceive. + ;; CPS; compile as a call. (convert-args cps args (lambda (cps args) (with-cps cps - (build-term - ($continue k src ($primcall name #f args))))))))) + (letv prim) + (letk kprim ($kargs ('prim) (prim) + ($continue k src ($call prim args)))) + (build-term ($continue kprim src ($prim name))))))))) ;; Prompts with inline handlers. (($ src escape-only? tag body