As promised here's the patch, sorry for the noise. On 27 March 2017 at 16:10, lemonboy <thatle...@gmail.com> wrote: > Hello hackers, > while doing some work on the optimizer I ended up noticing something > weird in how `scan-toplevel-assignments' > handles some nodes. A quick `git blame' shows that the bug has been > introduced some years ago in a fixup > commit [1], I've reverted the code to the previous version and added a > parameter to scan-each for clearing the > `previous' variable. I hope that's fine for you. > > Cheers, > LemonBoy > > [1] > http://code.call-cc.org/cgi-bin/gitweb.cgi?p=chicken-core.git;a=commit;h=ac8f2dadd
From 20eea8bf1a8272fc0d193fab3971e7c02a9c6495 Mon Sep 17 00:00:00 2001 From: LemonBoy <thatle...@gmail.com> Date: Mon, 27 Mar 2017 16:05:23 +0200 Subject: [PATCH] Fix a bug in scan-toplevel-assignments walk routine
Commit [ac8f2dadd] introduced a bug in the node walking routine. We end up evaluating only the first two subexpression for some kind of nodes, this means the else branch for if/cond nodes is never walked and neither is most of ##core#switch since we stop the walk at the first constant node. --- optimizer.scm | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/optimizer.scm b/optimizer.scm index 07081e3d..d92e5036 100644 --- a/optimizer.scm +++ b/optimizer.scm @@ -56,8 +56,11 @@ (set! escaped #t) (set! previous '())) - (define (scan-each ns e) - (for-each (lambda (n) (scan n e)) ns) ) + (define (scan-each ns e clear-previous?) + (for-each (lambda (n) + (when clear-previous? (set! previous '())) + (scan n e)) + ns)) (define (scan n e) (let ([params (node-parameters n)] @@ -74,12 +77,10 @@ [(if ##core#cond ##core#switch) (scan (first subs) e) (touch) - (scan (first subs) e) - (set! previous '()) - (scan (second subs) e)] + (scan-each (cdr subs) e #t)] [(let) - (scan-each (butlast subs) e) + (scan-each (butlast subs) e #f) (scan (last subs) (append params e)) ] [(lambda ##core#lambda) #f] @@ -103,7 +104,7 @@ (unless (memq var e) (mark var)) (remember var n) ) ) ] - [else (scan-each subs e)] ) ) ) + [else (scan-each subs e #f)]))) (debugging 'p "scanning toplevel assignments...") (scan node '()) -- 2.12.1
_______________________________________________ Chicken-hackers mailing list Chicken-hackers@nongnu.org https://lists.nongnu.org/mailman/listinfo/chicken-hackers