summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlan Dipert <alan@dipert.org>2010-12-17 15:25:15 -0500
committerStuart Halloway <stu@thinkrelevance.com>2010-12-17 17:09:06 -0500
commit2879523aaa72ca9cada4b54f4e4dabe6564de08a (patch)
tree68ca252ff7d17b847d7d0009f8854fa13d8af62e /src
parent4e677b34b33219811d66aa9dcb335145439dbecc (diff)
Fixed into-array behavior #678
Signed-off-by: Stuart Halloway <stu@thinkrelevance.com>
Diffstat (limited to 'src')
-rw-r--r--src/jvm/clojure/lang/RT.java29
1 files changed, 26 insertions, 3 deletions
diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java
index 086a3a6d..aad678c7 100644
--- a/src/jvm/clojure/lang/RT.java
+++ b/src/jvm/clojure/lang/RT.java
@@ -1398,9 +1398,32 @@ static public Object seqToTypedArray(ISeq seq) throws Exception{
}
static public Object seqToTypedArray(Class type, ISeq seq) throws Exception{
- Object ret = Array.newInstance(type, length(seq));
- for(int i = 0; seq != null; ++i, seq = seq.next())
- Array.set(ret, i, seq.first());
+ Object ret = Array.newInstance(type, length(seq));
+ if(type == Integer.TYPE){
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, intCast(seq.first()));
+ }
+ } else if(type == Byte.TYPE) {
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, byteCast(seq.first()));
+ }
+ } else if(type == Float.TYPE) {
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, floatCast(seq.first()));
+ }
+ } else if(type == Short.TYPE) {
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, shortCast(seq.first()));
+ }
+ } else if(type == Character.TYPE) {
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, charCast(seq.first()));
+ }
+ } else {
+ for(int i = 0; seq != null; ++i, seq=seq.next()){
+ Array.set(ret, i, seq.first());
+ }
+ }
return ret;
}