From 77f63c2a9e338207cb1fbe59b410958ce2ecda6d Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Wed, 21 Sep 2016 03:31:45 -0700 Subject: awk macro: streamline field splitting. * share/txr/awk.tl (sys:awk-state rec-to-f): Check for empty record only in the fs case; it's not necessary when tokenizing with ft. Check (not self.kfs) first, since it's the common case. Handle default case (no fs or ft) using tok-str using the regex #/[^ \t\n]+/, which requires no trim-str and no empty record check. --- share/txr/stdlib/awk.tl | 20 +++++++------------- 1 file changed, 7 insertions(+), 13 deletions(-) (limited to 'share') diff --git a/share/txr/stdlib/awk.tl b/share/txr/stdlib/awk.tl index b1e9f509..7c6ae504 100644 --- a/share/txr/stdlib/awk.tl +++ b/share/txr/stdlib/awk.tl @@ -53,25 +53,19 @@ (defmeth sys:awk-state rec-to-f (self) (cond - ((and (equal self.rec "") (not self.kfs)) - (set self.fields nil - self.nf 0)) (self.fs (when self.ft (throwf 'eval-error "awk: both fs and ft set")) - (set self.fields (split-str self.rec self.fs self.kfs) - self.nf (length self.fields))) + (if (and (not self.kfs) (equal self.rec "")) + (set self.fields nil + self.nf 0) + (set self.fields (split-str self.rec self.fs self.kfs) + self.nf (length self.fields)))) (self.ft (set self.fields (tok-str self.rec self.ft self.kfs) self.nf (length self.fields))) - ((let ((trimmed (trim-str self.rec))) - (cond - ((and (equal trimmed "") (not self.kfs)) - (set self.fields nil - self.nf 0)) - (t - (set self.fields (split-str trimmed #/[ \t\n]+/ self.kfs) - self.nf (length self.fields)))))))) + ((set self.fields (tok-str self.rec #/[^ \t\n]+/ self.kfs) + self.nf (length self.fields))))) (defmeth sys:awk-state f-to-rec (self) (set self.rec `@{self.fields self.ofs}`)) -- cgit v1.2.3