diff options
| author | 2024-12-31 14:56:25 -0500 | |
|---|---|---|
| committer | 2024-12-31 14:56:25 -0500 | |
| commit | 5633d49c3c7f97bc48e2034d3680a01ef48cca2a (patch) | |
| tree | 89434f1aea54213da7b25b07a1b090421ee0a7cb /cps.scm | |
| parent | simplify push-prompt and push-sub-continuation CPS commands (diff) | |
turn pure operations on metacontinuations into called procedures
Diffstat (limited to 'cps.scm')
| -rw-r--r-- | cps.scm | 39 |
1 files changed, 28 insertions, 11 deletions
@@ -139,12 +139,12 @@ (define cps:with-sub-kont (cps-closure '(prompt proc) 'γ 'κ (cps-apply '__split-γ - '(γ prompt) + '(kont γ prompt) 'γ (cps-kappa 'discarded - '(γ↑ γ↓) + '(kont+γ↑ γ↓) (cps-apply 'proc - `(cons* kont γ↑) + 'kont+γ↑ '__κ0 'γ↓))))) @@ -167,14 +167,22 @@ (let (length=> tail 2) => (prompt-part expr-part))) (let* ((new-prompt (gensym "p")) (new-metakont (gensym "γ")) + (cons*-metakont (gensym "γ")) (cps-expr (core->cps expr-part - `(cons* ,new-prompt ,kont ,new-metakont) - '__κ0))) + cons*-metakont + '__κ0)) + (cons*-expr (cps-apply + 'cons* + (list new-prompt kont new-metakont) + new-metakont + (cps-kappa 'ignored + (list cons*-metakont) + cps-expr)))) (core->cps prompt-part metakont (cps-kappa new-metakont (list new-prompt) - cps-expr)))) + cons*-expr)))) ;; (push-sub-cont e e) (after ((let (pair=> form) => (head tail)) (when (eq? head 'push-sub-continuation)) @@ -182,17 +190,26 @@ (let (length=> tail 2) => (sub-cont-part expr-part))) (let* ((sub-cont-reified (gensym "γ")) (sub-cont-from-eval (gensym "γ")) + (in-middle-sub-cont (gensym "γ")) (cps-expr (core->cps expr-part - `(in-middle ,sub-cont-reified - ,kont - ,sub-cont-from-eval) - '__κ0))) + in-middle-sub-cont + '__κ0)) + (in-middle-expr (cps-apply + 'in-middle + (list sub-cont-reified + kont + sub-cont-from-eval) + sub-cont-from-eval + (cps-kappa 'ignored + (list in-middle-sub-cont) + cps-expr))) + ) (core->cps sub-cont-part metakont (cps-kappa sub-cont-from-eval sub-cont-reified - cps-expr)))) + in-middle-expr)))) ;; (lambda formal expr) (after ((let (pair=> form) => (head tail)) (when (eq? head 'lambda)) |
