summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2017-12-15 06:06:41 -0800
committerKaz Kylheku <kaz@kylheku.com>2017-12-15 06:06:41 -0800
commit6a2cf5ffa33c96ad3ad55bf3ef5b9cc0e178c91f (patch)
tree40a6fa1dee943bd364a79a7abbccbfba5bb5491f
parentc0bfe3d125771c9974518bdb3e602128336ab914 (diff)
downloadtxr-6a2cf5ffa33c96ad3ad55bf3ef5b9cc0e178c91f.tar.gz
txr-6a2cf5ffa33c96ad3ad55bf3ef5b9cc0e178c91f.tar.bz2
txr-6a2cf5ffa33c96ad3ad55bf3ef5b9cc0e178c91f.zip
awk: condense implementation of range-macros.
* share/txr/stdlib/awk.tl (sys:awk-mac-let): Move repeated boiler-plate code from the various rng macrolets into an the implementation of the sys:rng macro they rely on. That implementation is split into two macros: sys:rng is now the name of a wrapper which adds the boiler-plate, and the bulky implementation macrolet is now called sys:rng-impl.
-rw-r--r--share/txr/stdlib/awk.tl49
1 files changed, 13 insertions, 36 deletions
diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl
index 5e658fd2..a0ba3de8 100644
--- a/share/txr/stdlib/awk.tl
+++ b/share/txr/stdlib/awk.tl
@@ -371,6 +371,10 @@
(again () '(return-from :awk-rec :awk-again))
(next-file () '(return-from :awk-file))
(sys:rng (form from-expr to-expr :env e)
+ ^(sys:rng-impl ,form
+ (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
+ (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
+ (sys:rng-impl (form from-expr to-expr :env e)
(let* ((style (car form))
(ix (pinc (qref ,awc nranges)))
(rng-temp (gensym))
@@ -435,42 +439,15 @@
(t t))))))
(qref ,awc rng-exprs))))
rng-temp)))
- (rng (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (-rng (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (rng- (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (-rng- (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (--rng (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (--rng- (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (rng+ (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (-rng+ (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
- (--rng+ (:form form from-expr to-expr)
- ^(sys:rng ,form
- (sys:awk-test ,from-expr ,(qref ,awc rng-rec-temp))
- (sys:awk-test ,to-expr ,(qref ,awc rng-rec-temp))))
+ (rng (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (-rng (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (rng- (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (-rng- (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (--rng (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (--rng- (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (rng+ (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (-rng+ (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
+ (--rng+ (:form form from-expr to-expr) ^(sys:rng ,form ,from-expr ,to-expr))
(ff (. opip-args)
^(symacrolet ((f (rslot ,',aws-sym 'fields 'f-to-rec)))
(set f [(opip ,*opip-args) f])))