allow defprotocolpath to be defined with no params argument for consistency with declarepath

This commit is contained in:
Nathan Marz 2016-01-31 10:01:08 -08:00
parent b16dbdfdd2
commit 8293f68696
2 changed files with 80 additions and 78 deletions

View file

@ -2,6 +2,7 @@
* ALL on maps auto-coerces MapEntry to vector, enabling smoother transformation of map keys * ALL on maps auto-coerces MapEntry to vector, enabling smoother transformation of map keys
* declarepath can now be parameterized * declarepath can now be parameterized
* Added params-reset which calls its path with the params index reset to 0. This enables recursive parameterized paths * Added params-reset which calls its path with the params index reset to 0. This enables recursive parameterized paths
* Added convenience syntax for defprotocolpath with no params, e.g. (defprotocolpath foo)
## 0.9.2 ## 0.9.2
* Added VOID selector which navigates nowhere * Added VOID selector which navigates nowhere

View file

@ -205,7 +205,10 @@
(defn- protpath-sym [name] (defn- protpath-sym [name]
(-> name (str "-prot") symbol)) (-> name (str "-prot") symbol))
(defmacro defprotocolpath [name params] (defmacro defprotocolpath
([name]
`(defprotocolpath ~name []))
([name params]
(let [prot-name (protpath-sym name) (let [prot-name (protpath-sym name)
m (-> name (str "-retrieve") symbol) m (-> name (str "-retrieve") symbol)
num-params (count params) num-params (count params)
@ -245,14 +248,18 @@
))) )))
~num-params ~num-params
) )
))))) ))))))
(defn declared-name [name] (defn declared-name [name]
(symbol (str name "-declared"))) (symbol (str name "-declared")))
(defn- declarepath* [name num-params] (defmacro declarepath
(let [declared (declared-name name) ([name]
`(declarepath ~name []))
([name params]
(let [num-params (count params)
declared (declared-name name)
rargs [(gensym "params") (gensym "pidx") (gensym "vals") rargs [(gensym "params") (gensym "pidx") (gensym "vals")
(gensym "structure") (gensym "next-fn")]] (gensym "structure") (gensym "next-fn")]]
`(do `(do
@ -283,13 +290,7 @@
))) )))
~num-params ~num-params
) )
))))) ))))))
(defmacro declarepath
([name] (declarepath* name 0))
([name params]
(declarepath* name (count params))))
(defmacro providepath [name apath] (defmacro providepath [name apath]
`(let [comped# (comp-paths* ~apath) `(let [comped# (comp-paths* ~apath)