summaryrefslogtreecommitdiff
path: root/src/clj
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-02-10 16:51:45 -0500
committerRich Hickey <richhickey@gmail.com>2010-02-10 16:51:45 -0500
commitf612ecffe2c47fa8df2ded84b36e4137f5eb4f6d (patch)
tree09092a045e2837f369069b04e003c8035aeac0e2 /src/clj
parent060b311c380312caef727dfbf4ff736e0b2a2857 (diff)
inlined bit shifts, added definterface (undocumented for now)
Diffstat (limited to 'src/clj')
-rw-r--r--src/clj/clojure/core.clj2
-rw-r--r--src/clj/clojure/core_deftype.clj14
2 files changed, 14 insertions, 2 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 3a315e63..eb8a8fe6 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -948,10 +948,12 @@
(defn bit-shift-left
"Bitwise shift left"
+ {:inline (fn [x n] `(. clojure.lang.Numbers (shiftLeft ~x ~n)))}
[x n] (. clojure.lang.Numbers shiftLeft x n))
(defn bit-shift-right
"Bitwise shift right"
+ {:inline (fn [x n] `(. clojure.lang.Numbers (shiftRight ~x ~n)))}
[x n] (. clojure.lang.Numbers shiftRight x n))
(defn even?
diff --git a/src/clj/clojure/core_deftype.clj b/src/clj/clojure/core_deftype.clj
index c675a012..b3b7eef6 100644
--- a/src/clj/clojure/core_deftype.clj
+++ b/src/clj/clojure/core_deftype.clj
@@ -8,6 +8,16 @@
(in-ns 'clojure.core)
+;;;;;;;;;;;;;;;;;;;;;;;;;;;; definterface ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
+
+;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)))]
+ `(gen-interface :name ~(symbol (str *ns* "." name)) :methods ~(vec (map psig sigs)))))
+
;;;;;;;;;;;;;;;;;;;;;;;;;;;; reify/deftype ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- parse-opts [s]
@@ -36,7 +46,7 @@
methods (mapcat #(map (fn [[nm [& args] & body]]
`(~nm [~(:as opts) ~@args] ~@body)) %)
(vals impls))]
- [interfaces methods]))
+ [interfaces methods opts]))
(defmacro reify
"reify is a macro with the following structure:
@@ -269,7 +279,7 @@
[name [& fields] & opts+specs]
(let [gname (if *compile-files* name (gensym (str name "__")))
- [interfaces methods] (parse-opts+specs opts+specs)
+ [interfaces methods opts] (parse-opts+specs opts+specs)
classname (symbol (str *ns* "." gname))
tag (keyword (str *ns*) (str name))
hinted-fields fields