summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--share/txr/stdlib/awk.tl24
-rw-r--r--txr.17
2 files changed, 22 insertions, 9 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index b0f54aaf..7c4033e6 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -302,7 +302,8 @@
(from-expr-ex (sys:expand from-expr e))
(to-expr-ex (sys:expand to-expr e))
(flag-old (gensym))
- (flag-new (gensym)))
+ (flag-act (gensym))
+ (flag-deact (gensym)))
(tree-bind ((from-expr-ex fe-fv fe-ff fe-ev fe-ef)
(to-expr-ex te-fv te-ff te-ev te-ef)
(from-expr-orig to-expr-orig))
@@ -330,16 +331,21 @@
'functions)
(push rng-temp (qref ,awc rng-expr-temps))
(push ^(placelet ((flag (vecref (qref ,',aws-sym rng-vec) ,ix)))
- (let* ((,flag-old flag) ,flag-new)
+ (let ((,flag-old flag) ,flag-act ,flag-deact)
(when (or ,flag-old ,from-expr-ex)
- (set ,flag-new t))
- (when (and ,flag-new ,to-expr-ex)
- (set ,flag-new nil))
+ (set ,flag-act t))
+ (when (and ,flag-act ,to-expr-ex)
+ (set ,flag-act nil)
+ (set ,flag-deact t))
,*(caseq style
- (rng ^((or (set flag ,flag-new) ,flag-old)))
- (-rng- ^((and (set flag ,flag-new) ,flag-old)))
- (rng- ^((set flag ,flag-new)))
- (-rng ^((set flag ,flag-new) ,flag-old)))))
+ (rng ^((or (set flag ,flag-act)
+ ,(if (and (plusp sys:compat)
+ (<= sys:compat 177))
+ flag-old
+ flag-deact))))
+ (-rng- ^((and (set flag ,flag-act) ,flag-old)))
+ (rng- ^((set flag ,flag-act)))
+ (-rng ^((set flag ,flag-act) ,flag-old)))))
(qref ,awc rng-exprs))
rng-temp)))
(rng (:form form from-expr to-expr)
diff --git a/txr.1 b/txr.1
index d795e61c..24b48b29 100644
--- a/txr.1
+++ b/txr.1
@@ -58234,6 +58234,13 @@ of these version values, the described behaviors are provided if
is given an argument which is equal or lower. For instance
.code "-C 103"
selects the behaviors described below for version 105, but not those for 102.
+.IP 177
+A value of 177 or lower causes the emulation of a bug which was present in the
+.code rng
+awk macro. A range whose start and end condition matched on the same record failed
+to activate for that record, even though
+.code rng
+is inclusive. The behavior is incompatible with POSIX Awk.
.IP 174
A value of 174 or lower restores a previous behavior of variable substitution
in the