summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2007-10-16 01:52:23 +0000
committerRich Hickey <richhickey@gmail.com>2007-10-16 01:52:23 +0000
commit83a9de7db39c25429f00d265043212943d229fc0 (patch)
tree76f7e10e87cd6059ea29a5b7926801116cca441a /src
parent8d97d8311037125a74d1f21efbea1581adcf3cd0 (diff)
added new-proxy
Diffstat (limited to 'src')
-rw-r--r--src/boot.clj14
-rw-r--r--src/jvm/clojure/lang/ArraySeq.java2
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);
}