From ade08bbd52acaf3bb51e1a3a1c1cd73bb1ba9948 Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Mon, 13 Jun 2016 00:40:37 -0400 Subject: - Now avoiding unnecessary pops of the pattern-matching stack/cursor. --- src/lux/optimizer.clj | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/lux/optimizer.clj b/src/lux/optimizer.clj index 8c3380b0a..24636bf16 100644 --- a/src/lux/optimizer.clj +++ b/src/lux/optimizer.clj @@ -100,10 +100,18 @@ _sub-tests)) (&/|list $PopPM)))))) +(defn ^:private clean-unnecessary-pops [steps] + (|case steps + (&/$Cons ($PopPM) _steps) + (clean-unnecessary-pops _steps) + + _ + steps)) + (defn ^:private transform-pm [test body-id] - (|case (&/|reverse (&/|++ (transform-pm* test) (&/|list ($ExecPM body-id)))) - (&/$Cons _last _prevs) - (&/fold (fn [right left] ($SeqPM left right)) _last _prevs))) + (&/fold (fn [right left] ($SeqPM left right)) + ($ExecPM body-id) + (clean-unnecessary-pops (&/|reverse (transform-pm* test))))) (defn ^:private fuse-pms [pre post] (|case (&/T [pre post]) -- cgit v1.2.3