diff options
-rw-r--r-- | share/txr/stdlib/awk.tl | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl index 4c40494a..f3b80a79 100644 --- a/share/txr/stdlib/awk.tl +++ b/share/txr/stdlib/awk.tl @@ -143,13 +143,17 @@ (let ((ix (pinc (qref ,awc nranges))) (rng-temp (gensym)) (from-expr-ex (sys:expand from-expr e)) - (to-expr-ex (sys:expand to-expr e))) + (to-expr-ex (sys:expand to-expr e)) + (flag-old (gensym)) + (flag-new (gensym))) (push rng-temp (qref ,awc rng-expr-temps)) (push ^(placelet ((flag (vecref (qref ,',aws-sym rng-vec) ,ix))) - (cond - (,from-expr-ex (set flag t)) - (,to-expr-ex (zap flag) t) - (flag))) + (let* ((,flag-old flag) ,flag-new) + (when (or ,flag-old ,from-expr-ex) + (set ,flag-new t)) + (when (and ,flag-new ,to-expr-ex) + (set ,flag-new nil)) + (or (set flag ,flag-new) ,flag-old))) (qref ,awc rng-exprs)) rng-temp))) ,*body))) |