summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/awk.tl14
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)))