From 2879523aaa72ca9cada4b54f4e4dabe6564de08a Mon Sep 17 00:00:00 2001 From: Alan Dipert Date: Fri, 17 Dec 2010 15:25:15 -0500 Subject: Fixed into-array behavior #678 Signed-off-by: Stuart Halloway --- src/jvm/clojure/lang/RT.java | 29 ++++++++++++++++++++++++++--- 1 file changed, 26 insertions(+), 3 deletions(-) (limited to 'src/jvm') 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; } -- cgit v1.2.3-70-g09d2