diff options
author | Rich Hickey <richhickey@gmail.com> | 2007-10-16 01:52:23 +0000 |
---|---|---|
committer | Rich Hickey <richhickey@gmail.com> | 2007-10-16 01:52:23 +0000 |
commit | 83a9de7db39c25429f00d265043212943d229fc0 (patch) | |
tree | 76f7e10e87cd6059ea29a5b7926801116cca441a /src | |
parent | 8d97d8311037125a74d1f21efbea1581adcf3cd0 (diff) |
added new-proxy
Diffstat (limited to 'src')
-rw-r--r-- | src/boot.clj | 14 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ArraySeq.java | 2 |
2 files changed, 14 insertions, 2 deletions
diff --git a/src/boot.clj b/src/boot.clj index bfa3d21f..8698b7b7 100644 --- a/src/boot.clj +++ b/src/boot.clj @@ -541,6 +541,16 @@ (into-array classes) (new clojure.lang.ProxyHandler method-map)))) +(defmacro new-proxy [classes & fs] + `(make-proxy + ~(apply vector (map (appl list 'class) classes)) + ~(loop [fmap {} fs fs] + (if fs + (recur (assoc fmap (name (ffirst fs)) + (cons 'fn (rfirst fs))) + (rest fs)) + fmap)))) + (defn print ([x] (thisfn x *out*)) ([x writer] (. clojure.lang.RT (print x writer)))) @@ -585,10 +595,12 @@ reduce reverse comp appl every not-every any not-any map mapcat filter take take-while drop drop-while + zipmap cycle split-at split-with repeat replicate iterate dolist eval import unimport refer unrefer in-namespace unintern into-array array - make-proxy prn print newline *out* *current-namespace* .-> + make-proxy new-proxy + prn print newline *out* *current-namespace* .-> )) diff --git a/src/jvm/clojure/lang/ArraySeq.java b/src/jvm/clojure/lang/ArraySeq.java index 43a42071..f23cc1c0 100644 --- a/src/jvm/clojure/lang/ArraySeq.java +++ b/src/jvm/clojure/lang/ArraySeq.java @@ -22,7 +22,7 @@ static public ArraySeq create(){ } static public ArraySeq create(Object... array){ - if(array.length == 0) + if(array == null || array.length == 0) return null; return new ArraySeq(array, 0); } |