diff options
-rw-r--r-- | src/clj/clojure/core.clj | 2 | ||||
-rw-r--r-- | src/jvm/clojure/lang/ArraySeq.java | 10 | ||||
-rw-r--r-- | src/jvm/clojure/lang/RT.java | 6 | ||||
-rw-r--r-- | src/jvm/clojure/lang/Reflector.java | 10 |
4 files changed, 14 insertions, 14 deletions
diff --git a/src/clj/clojure/core.clj b/src/clj/clojure/core.clj index 169a1e5b..1e74fef6 100644 --- a/src/clj/clojure/core.clj +++ b/src/clj/clojure/core.clj @@ -1820,7 +1820,7 @@ {:inline (fn [a i] `(. clojure.lang.RT (aget ~a ~i))) :inline-arities #{2}} ([array idx] - (. Array (get array idx))) + (clojure.lang.Reflector/prepRet (. Array (get array idx)))) ([array idx & idxs] (apply aget (aget array idx) idxs))) diff --git a/src/jvm/clojure/lang/ArraySeq.java b/src/jvm/clojure/lang/ArraySeq.java index dfdb4560..cf4325a7 100644 --- a/src/jvm/clojure/lang/ArraySeq.java +++ b/src/jvm/clojure/lang/ArraySeq.java @@ -62,7 +62,7 @@ ArraySeq(IPersistentMap meta, Object array, int i){ public Object first(){ if(oa != null) return oa[i]; - return Array.get(array, i); + return Reflector.prepRet(Array.get(array, i)); } public ISeq rest(){ @@ -102,9 +102,9 @@ public Object reduce(IFn f) throws Exception{ return ret; } - Object ret = Array.get(array, i); + Object ret = Reflector.prepRet(Array.get(array, i)); for(int x = i + 1; x < Array.getLength(array); x++) - ret = f.invoke(ret, Array.get(array, x)); + ret = f.invoke(ret, Reflector.prepRet(Array.get(array, x))); return ret; } @@ -116,9 +116,9 @@ public Object reduce(IFn f, Object start) throws Exception{ ret = f.invoke(ret, oa[x]); return ret; } - Object ret = f.invoke(start, Array.get(array, i)); + Object ret = f.invoke(start, Reflector.prepRet(Array.get(array, i))); for(int x = i + 1; x < Array.getLength(array); x++) - ret = f.invoke(ret, Array.get(array, x)); + ret = f.invoke(ret, Reflector.prepRet(Array.get(array, x))); return ret; } diff --git a/src/jvm/clojure/lang/RT.java b/src/jvm/clojure/lang/RT.java index 1c81e3c8..f6139d1b 100644 --- a/src/jvm/clojure/lang/RT.java +++ b/src/jvm/clojure/lang/RT.java @@ -782,7 +782,7 @@ static public Object nth(Object coll, int n){ else if(coll instanceof String) return Character.valueOf(((String) coll).charAt(n)); else if(coll.getClass().isArray()) - return Array.get(coll, n); + return Reflector.prepRet(Array.get(coll, n)); else if(coll instanceof List) return ((List) coll).get(n); else if(coll instanceof Matcher) @@ -834,7 +834,7 @@ static public Object nth(Object coll, int n, Object notFound){ else if(coll.getClass().isArray()) { if(n < Array.getLength(coll)) - return Array.get(coll, n); + return Reflector.prepRet(Array.get(coll, n)); return notFound; } else if(coll instanceof List) @@ -1780,7 +1780,7 @@ static public Object[] aclone(Object[] xs){ } static public Object aget(Object xs, int i){ - return Array.get(xs, i); + return Reflector.prepRet(Array.get(xs, i)); } static public Object aset(Object xs, int i, Object v){ diff --git a/src/jvm/clojure/lang/Reflector.java b/src/jvm/clojure/lang/Reflector.java index 5f40772b..0eaf1123 100644 --- a/src/jvm/clojure/lang/Reflector.java +++ b/src/jvm/clojure/lang/Reflector.java @@ -83,7 +83,7 @@ static Object invokeMatchingMethod(String methodName, List methods, Object targe throw new IllegalArgumentException(noMethodReport(methodName,target)); try { - return prepRet(m.getReturnType(), m.invoke(target, boxedArgs)); + return prepRet(m.invoke(target, boxedArgs)); } catch(InvocationTargetException e) { @@ -203,7 +203,7 @@ public static Object getStaticField(Class c, String fieldName) throws Exception{ Field f = getField(c, fieldName, true); if(f != null) { - return prepRet(f.getType(), f.get(null)); + return prepRet(f.get(null)); } throw new IllegalArgumentException("No matching field found: " + fieldName + " for " + c); @@ -230,7 +230,7 @@ public static Object getInstanceField(Object target, String fieldName) throws Ex Field f = getField(c, fieldName, false); if(f != null) { - return prepRet(f.getType(), f.get(target)); + return prepRet(f.get(target)); } throw new IllegalArgumentException("No matching field found: " + fieldName + " for " + target.getClass()); @@ -263,7 +263,7 @@ public static Object invokeInstanceMember(Object target, String name) throws Exc Field f = getField(c, name, false); if(f != null) //field get { - return prepRet(f.getType(), f.get(target)); + return prepRet(f.get(target)); } return invokeInstanceMethod(target, name, RT.EMPTY_ARRAY); } @@ -418,7 +418,7 @@ static boolean isCongruent(Class[] params, Object[] args){ return ret; } -static Object prepRet(Class c, Object x){ +public static Object prepRet(Object x){ // if(c == boolean.class) // return ((Boolean) x).booleanValue() ? RT.T : null; if(x instanceof Boolean) |