diff options
-rw-r--r-- | share/txr/stdlib/awk.tl | 24 | ||||
-rw-r--r-- | txr.1 | 7 |
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) @@ -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 |