summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/awk.tl38
1 files changed, 17 insertions, 21 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index 57ac3b1b..c31d8d0f 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -338,35 +338,30 @@
(push rng-temp (qref ,awc rng-expr-temps))
(push ^(placelet ((,flag (vecref ,(qref ,awc rng-vec-temp) ,ix)))
(let ((,flag-old ,flag) ,flag-act ,flag-deact
- ,*(if need-mid ^(,flag-mid (,from-expr-val ,from-expr-ex))))
+ ,*(if need-mid ^((,from-expr-val ,from-expr-ex))))
,*(if need-mid
- ^((when (and ,flag-old (not ,from-expr-val))
- (set ,flag-mid t))
- (cond
+ ^((set ,flag-act
+ (caseq ,flag-old
+ (nil (set ,flag-act (true ,from-expr-val)))
+ (:end :end)
+ (:mid :mid)
+ ((t) (if ,from-expr-val t :mid)))))
+ ^((cond
(,flag-old (set ,flag-act ,flag-old))
- (,from-expr-val (set ,flag-act t))))
- ^((cond
- (,flag-old (set ,flag-act ,flag-old))
- (,from-expr-ex (set ,flag-act t)))))
+ (,from-expr-ex (set ,flag-act t)))))
,(if need-end
^(caseq ,flag-act
- ((t) (when ,to-expr-ex
- (set ,flag-act :end)
- (set ,flag-deact t)
- ,*(if need-mid
- ^((set ,flag-mid nil)))))
+ ((t ,*(if need-mid '(:mid))) (when ,to-expr-ex
+ (set ,flag-act :end)
+ (set ,flag-deact t)))
(:end (cond
(,to-expr-ex (set ,flag-deact t))
(,(if need-mid from-expr-val from-expr-ex)
(set ,flag-act t ,flag-old nil))
- (t (set ,flag-act nil)))
- ,*(if need-mid
- ^((set ,flag-mid nil)))))
+ (t (set ,flag-act nil)))))
^(when (and ,flag-act ,to-expr-ex)
(set ,flag-act nil)
- (set ,flag-deact t)
- ,*(if need-mid
- ^((set ,flag-mid nil)))))
+ (set ,flag-deact t)))
,*(caseq style
((rng rng+) ^((or (set ,flag ,flag-act)
,(if (and (plusp sys:compat)
@@ -377,8 +372,9 @@
(rng- ^((set ,flag ,flag-act)))
(-rng ^((set ,flag ,flag-act) ,flag-old))
(-rng+ ^((set ,flag ,flag-act) (if ,flag-act ,flag-old)))
- (--rng- ^((set ,flag ,flag-act) ,flag-mid))
- ((--rng --rng+) ^((set ,flag ,flag-act) (or ,flag-mid ,flag-deact))))))
+ (--rng- ^((set ,flag ,flag-act) (eq ,flag-act :mid)))
+ ((--rng --rng+) ^((set ,flag ,flag-act)
+ (or (eq ,flag-act :mid) ,flag-deact))))))
(qref ,awc rng-exprs))
rng-temp)))
(rng (:form form from-expr to-expr)