From bb77fb8f9d1ba41d628f4a49582277c7c0b2f66a Mon Sep 17 00:00:00 2001 From: Nathan Marz Date: Fri, 2 Sep 2016 09:17:32 -0400 Subject: [PATCH] moved mk-comp-navs macro into clj namespace --- src/clj/com/rpl/specter/impl.cljc | 21 +++------------------ src/clj/com/rpl/specter/util_macros.clj | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/src/clj/com/rpl/specter/impl.cljc b/src/clj/com/rpl/specter/impl.cljc index 580112c..a17ce90 100644 --- a/src/clj/com/rpl/specter/impl.cljc +++ b/src/clj/com/rpl/specter/impl.cljc @@ -1,10 +1,10 @@ (ns com.rpl.specter.impl #?(:cljs (:require-macros - [com.rpl.specter.util-macros :refer [doseqres]])) + [com.rpl.specter.util-macros :refer [doseqres mk-comp-navs]])) (:use [com.rpl.specter.protocols :only [select* transform* collect-val RichNavigator]] - #?(:clj [com.rpl.specter.util-macros :only [doseqres]])) + #?(:clj [com.rpl.specter.util-macros :only [doseqres mk-comp-navs]])) (:require [com.rpl.specter.protocols :as p] [clojure.string :as s] @@ -510,24 +510,9 @@ -(defn gensyms [amt] +(defn- gensyms [amt] (vec (repeatedly amt gensym))) -(defmacro mk-comp-navs [] - (let [impls (for [i (range 3 20)] - (let [[fsym & rsyms :as syms] (gensyms i)] - `([~@syms] (~'comp-navs ~fsym (~'comp-navs ~@rsyms))))) - last-syms (gensyms 19)] - `(defn comp-navs - ([] STAY*) - ([nav1#] nav1#) - ([nav1# nav2#] (combine-two-navs nav1# nav2#)) - ~@impls - ([~@last-syms ~'& rest#] - (~'comp-navs - (~'comp-navs ~@last-syms) - (reduce comp-navs rest#)))))) - (mk-comp-navs) (defn srange-transform* [structure start end next-fn] diff --git a/src/clj/com/rpl/specter/util_macros.clj b/src/clj/com/rpl/specter/util_macros.clj index 6850812..456a203 100644 --- a/src/clj/com/rpl/specter/util_macros.clj +++ b/src/clj/com/rpl/specter/util_macros.clj @@ -10,3 +10,21 @@ ~backup-res ~aseq)) + +(defn- gensyms [amt] + (vec (repeatedly amt gensym))) + +(defmacro mk-comp-navs [] + (let [impls (for [i (range 3 20)] + (let [[fsym & rsyms :as syms] (gensyms i)] + `([~@syms] (~'comp-navs ~fsym (~'comp-navs ~@rsyms))))) + last-syms (gensyms 19)] + `(defn ~'comp-navs + ([] ~'com.rpl.specter.impl/STAY*) + ([nav1#] nav1#) + ([nav1# nav2#] (~'com.rpl.specter.impl/combine-two-navs nav1# nav2#)) + ~@impls + ([~@last-syms ~'& rest#] + (~'comp-navs + (~'comp-navs ~@last-syms) + (reduce ~'comp-navs rest#))))))