From 5f96ef4fb0f946139e176e074c82c78a427193f8 Mon Sep 17 00:00:00 2001 From: Linus Date: Fri, 1 Jan 2021 22:00:39 +0100 Subject: [PATCH] Promote accumulator lets to the outermost let This is a bug I never hit, due to me only having accumulators that gets passed along. However, something like vectoring or hashing should behave like (in-vector ...), which means the let binding needs to be propagated upwards. * goof.scm change cl-next/acc to promote let bindings for accumulators to the outermost let. --- goof.scm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/goof.scm b/goof.scm index 0fe9164..403dfa7 100644 --- a/goof.scm +++ b/goof.scm @@ -221,7 +221,7 @@ ;; We have ONE subloop! ((_ (new-lets ...) ((accvar accinit accupdate) ...) (new-vars ...) (new-checks ...) (new-refs ...) (new-finals ...) orig name - ((lets ...) . lets-rest) + (lets ... (outermost-lets ...)) ((accs ...) ((oldacc oldinit oldupdate) ...)) ((vars ...) . vars-rest) ((checks ...) . checks-rest) @@ -229,7 +229,7 @@ (finals ...) ff ul uw ub uf clauses . body) (cl orig name - ((lets ... new-lets ...) . lets-rest) + (lets ... (outermost-lets ... new-lets ...)) ((accs ... (accvar accvar accupdate) ...) ((oldacc oldinit oldupdate) ... (accvar accinit accvar) ...)) ((vars ... new-vars ...) . vars-rest) ((checks ... new-checks ...) . checks-rest) @@ -239,15 +239,15 @@ ;; We have several subloops! ((_ (new-lets ...) ((accvar accinit accupdate) ...) (new-vars ...) (new-checks ...) (new-refs ...) (new-finals ...) orig name - ((lets ...) . lets-rest) + (lets ... (outermost-lets ...)) ((accs ...) ((oldacc oldinit oldupdate) ...) ... ((oldestacc oldestinit oldestupdate) ...)) ((vars ...) . vars-rest) ((checks ...) . checks-rest) ((refs ...) . refs-rest) (finals ...) ff ul uw ub uf clauses . body) - (cl orig name - ((lets ... new-lets ...) . lets-rest) + (cl orig name + (lets ... (outermost-lets ... new-lets ...)) ((accs ... (accvar accvar accupdate) ...) ((oldacc oldinit oldupdate) ... (accvar accvar accvar) ...) ... ((oldestacc oldestinit oldestupdate) ... (accvar accinit accvar) ...)) ((vars ... new-vars ...) . vars-rest)