diff options
-rw-r--r-- | src/boot.clj | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/boot.clj b/src/boot.clj index b649d531..3005a182 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -223,4 +223,14 @@ (defmacro .. ([x form] `(. ~x ~form)) - ([x form & more] `(.. (. ~x ~form) ~@more)))
\ No newline at end of file + ([x form & more] `(.. (. ~x ~form) ~@more))) + +;;polyfns +(defmacro defpolyfn [name dispatch-fn] + `(def ~name (new clojure.lang.PolyFn ~dispatch-fn))) + +(defmacro defmethod [polyfn dispatch-val & fn-tail] + (let [pvar (gensym)] + `(let [~pvar (the-var ~polyfn)] + (locking ~pvar + (. ~pvar (bindRoot (.. ~pvar (getRoot) (assoc ~dispatch-val (fn ~@fn-tail))))))))) |