diff options
author | Rich Hickey <richhickey@gmail.com> | 2010-02-10 16:51:45 -0500 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2010-02-10 16:51:45 -0500 |
commit | f612ecffe2c47fa8df2ded84b36e4137f5eb4f6d (patch) | |
tree | 09092a045e2837f369069b04e003c8035aeac0e2 /src/clj | |
parent | 060b311c380312caef727dfbf4ff736e0b2a2857 (diff) |
inlined bit shifts, added definterface (undocumented for now)
Diffstat (limited to 'src/clj')
-rw-r--r-- | src/clj/clojure/core.clj | 2 | ||||
-rw-r--r-- | src/clj/clojure/core_deftype.clj | 14 |
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 |