summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRich Hickey <richhickey@gmail.com>2010-02-09 14:51:24 -0500
committerRich Hickey <richhickey@gmail.com>2010-02-09 14:51:24 -0500
commitd4bfd14ddd426b9d6f72fb52d8fa5257a62fd55c (patch)
tree1833e44eb9d0bb42ee2af1008a685226e9e3ca38
parent2855e34106b2cacd4614f2b7e31f1536b4b849bc (diff)
added object-array
-rw-r--r--src/clj/clojure/core.clj6
-rw-r--r--src/jvm/clojure/lang/RT.java14
2 files changed, 18 insertions, 2 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj
index 23d91afa..76d96529 100644
--- a/src/clj/clojure/core.clj
+++ b/src/clj/clojure/core.clj
@@ -3690,6 +3690,12 @@
([size-or-seq] (. clojure.lang.Numbers double_array size-or-seq))
([size init-val-or-seq] (. clojure.lang.Numbers double_array size init-val-or-seq)))
+(defn object-array
+ "Creates an array of objects"
+ {:inline (fn [arg] `(. clojure.lang.RT object_array ~arg))
+ :inline-arities #{1}}
+ ([size-or-seq] (. clojure.lang.RT object_array size-or-seq)))
+
(defn int-array
"Creates an array of ints"
{:inline (fn [& args] `(. clojure.lang.Numbers int_array ~@args))
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 044cd9ea..9fa16a4c 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -1075,8 +1075,18 @@ static public ISeq arrayToList(Object[] a) throws Exception{
return ret;
}
-static public Object[] objectArray(int n){
- return new Object[n];
+static public Object[] object_array(Object sizeOrSeq){
+ if(sizeOrSeq instanceof Number)
+ return new Object[((Number) sizeOrSeq).intValue()];
+ else
+ {
+ ISeq s = RT.seq(sizeOrSeq);
+ int size = RT.count(s);
+ Object[] ret = new Object[size];
+ for(int i = 0; i < size && s != null; i++, s = s.next())
+ ret[i] = s.first();
+ return ret;
+ }
}
static public Object[] toArray(Object coll) throws Exception{