diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-09-15 14:58:20 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-09-15 14:58:20 +0000 |
commit | eef51a1406ec5cdf6eeceecaab7ede9f3d228340 (patch) | |
tree | 246c50fecde7946c025298c41a50ba75ec23c088 /src | |
parent | b0fade9a41329e679dcf95a7d663299b465ea447 (diff) |
added polyfn support
Diffstat (limited to 'src')
-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))))))))) |