diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2016-09-24 07:23:58 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2016-09-24 07:23:58 -0700 |
commit | 97870898a2491242223a64715871cec339c42517 (patch) | |
tree | 78cb5f58277872819d67fa82d48ef10967ec8413 /share | |
parent | c99a38dde59aa8b0c2496fef092a93e324ec3e33 (diff) | |
download | txr-97870898a2491242223a64715871cec339c42517.tar.gz txr-97870898a2491242223a64715871cec339c42517.tar.bz2 txr-97870898a2491242223a64715871cec339c42517.zip |
awk macro: use range test logic for clause conditions.
* share/txr/stdlib/awk.tl (sys:range-test): Function renamed
to sys:awk-test, since it's not just for ranges.
(sys:awk-let): Uses of sys:range-test follow rename.
sys:awk-test introduced into expansion of cond parts
of cond-action clauses.
* txr.1: Documented new behavior (conditions can produce
a function or regex, which is implicitly invoked on rec).
Diffstat (limited to 'share')
-rw-r--r-- | share/txr/stdlib/awk.tl | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl index eccef632..466ab544 100644 --- a/share/txr/stdlib/awk.tl +++ b/share/txr/stdlib/awk.tl @@ -110,7 +110,7 @@ (t (put-string self.rec) (put-string self.ors)))) -(defun sys:range-test (val rec) +(defun sys:awk-test (val rec) (caseq (typeof val) ((regex fun) (call val rec)) (t val))) @@ -200,8 +200,8 @@ (qref ,awc rng-exprs)) rng-temp)) (rng (from-expr to-expr) - ^(sys:rng (sys:range-test ,from-expr ,(qref ,awc rng-rec-temp)) - (sys:range-test ,to-expr ,(qref ,awc rng-rec-temp)))) + ^(sys:rng (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp)) + (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp)))) (ff (. opip-args) ^(symacrolet ((f (rslot ,',aws-sym 'fields 'f-to-rec))) (set f [(opip ,*opip-args) f]))) @@ -215,7 +215,8 @@ (defmacro awk (:env e . clauses) (let ((awc (sys:awk-expander clauses))) (with-gensyms (aws-sym awk-begf-fun awk-fun awk-endf-fun awk-retval) - (let* ((p-actions-xform-unex (mapcar (aret ^(when ,@1 ,*@rest)) + (let* ((p-actions-xform-unex (mapcar (aret ^(when (sys:awk-test ,@1 rec) + ,*@rest)) awc.cond-actions)) (p-actions-xform (sys:expand ^(sys:awk-let ,awc ,aws-sym |