summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorStuart Halloway <stu@thinkrelevance.com>2010-04-23 10:01:31 -0400
committerStuart Halloway <stu@thinkrelevance.com>2010-04-24 14:41:45 -0400
commit1f70ed92bebe8a1e75c2fc2aeb30ba3745d87df0 (patch)
tree86e73e5e6a55e2e5b5392eabff51ea839bcc1432 /src
parentc73a4bad6297251ab5545affd6baf79d2390f8c6 (diff)
munge package names in definterface, #306
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
Diffstat (limited to 'src')
-rw-r--r--src/clj/clojure/core_deftype.clj7
-rw-r--r--src/clj/clojure/core_deftype.clj.rej21
2 files changed, 27 insertions, 1 deletions
diff --git a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj
index f18b690f..f2923279 100644
--- a/src/clj/clojure/core_deftype.clj
+++ b/src/clj/clojure/core_deftype.clj
@@ -10,13 +10,18 @@
;;;;;;;;;;;;;;;;;;;;;;;;;;;; definterface ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+(defn namespace-munge
+ "Convert a Clojure namespace name to a legal Java package name."
+ [ns]
+ (.replace (str ns) \- \_))
+
;for now, built on gen-interface
(defmacro definterface
[name & sigs]
(let [tag (fn [x] (or (:tag (meta x)) Object))
psig (fn [[name [& args]]]
(vector name (vec (map tag args)) (tag name)))
- cname (with-meta (symbol (str *ns* "." name)) (meta name))]
+ cname (symbol (str (namespace-munge *ns*) "." name))]
`(do (gen-interface :name ~cname :methods ~(vec (map psig sigs)))
(import ~cname))))
diff --git a/src/clj/clojure/core_deftype.clj.rej b/src/clj/clojure/core_deftype.clj.rej
new file mode 100644
index 00000000..83fab7ee
--- /dev/null
+++ b/src/clj/clojure/core_deftype.clj.rej
@@ -0,0 +1,21 @@
+diff a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj (rejected hunks)
+@@ -10,13 +10,18 @@
+
+ ;;;;;;;;;;;;;;;;;;;;;;;;;;;; definterface ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
++(defn namespace-munge
++ "Convert a Clojure namespace name to a legal Java package name."
++ [ns]
++ (.replace (str ns) \- \_))
++
+ ;for now, built on gen-interface
+ (defmacro definterface
+ [name & sigs]
+ (let [tag (fn [x] (or (:tag (meta x)) Object))
+ psig (fn [[name [& args]]]
+ (vector name (vec (map tag args)) (tag name)))
+- cname (symbol (str *ns* "." name))]
++ cname (symbol (str (namespace-munge *ns*) "." name))]
+ `(do (gen-interface :name ~cname :methods ~(vec (map psig sigs)))
+ (import ~cname))))
+