summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-09-15 14:58:20 +0000
committerRich Hickey <richhickey@gmail.com>2007-09-15 14:58:20 +0000
commiteef51a1406ec5cdf6eeceecaab7ede9f3d228340 (patch)
tree246c50fecde7946c025298c41a50ba75ec23c088 /src
parentb0fade9a41329e679dcf95a7d663299b465ea447 (diff)
added polyfn support
Diffstat (limited to 'src')
-rw-r--r--src/boot.clj12
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)))))))))