Mercurial Hosting > luan
diff src/luan/LuanJavaFunction.java @ 111:2428ecfed375
change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
git-svn-id: https://luan-java.googlecode.com/svn/trunk@112 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 23 May 2014 20:40:05 +0000 |
parents | 3a0ff21f0c96 |
children | 8c706d6eb5dc |
line wrap: on
line diff
--- a/src/luan/LuanJavaFunction.java Fri May 23 04:36:47 2014 +0000 +++ b/src/luan/LuanJavaFunction.java Fri May 23 20:40:05 2014 +0000 @@ -49,7 +49,7 @@ return method.getParameterTypes(); } - @Override public Object[] call(LuanState luan,Object[] args) throws LuanException { + @Override public Object call(LuanState luan,Object[] args) throws LuanException { args = fixArgs(luan,args); try { return doCall(luan,args); @@ -59,12 +59,12 @@ } } - public Object[] rawCall(LuanState luan,Object[] args) throws LuanException { + public Object rawCall(LuanState luan,Object[] args) throws LuanException { args = fixArgs(luan,args); return doCall(luan,args); } - private Object[] doCall(LuanState luan,Object[] args) throws LuanException { + private Object doCall(LuanState luan,Object[] args) throws LuanException { Object rtn; try { rtn = method.invoke(obj,args); @@ -158,35 +158,25 @@ private interface RtnConverter { - public Object[] convert(Object obj); + public Object convert(Object obj); } private static final RtnConverter RTN_EMPTY = new RtnConverter() { - public Object[] convert(Object obj) { + @Override public Object[] convert(Object obj) { return EMPTY; } }; - private static final RtnConverter RTN_ARRAY = new RtnConverter() { - public Object[] convert(Object obj) { - if( obj == null ) - return NULL_RTN; - return (Object[])obj; + private static final RtnConverter RTN_SAME = new RtnConverter() { + @Override public Object convert(Object obj) { + return obj; } }; - private static final RtnConverter RTN_ONE = new RtnConverter() { - public Object[] convert(Object obj) { - return new Object[]{obj}; - } - }; - - private static final Object[] NULL_RTN = new Object[1]; - private static final RtnConverter RTN_NUMBER_ARRAY = new RtnConverter() { - public Object[] convert(Object obj) { + @Override public Object convert(Object obj) { if( obj == null ) - return NULL_RTN; + return null; Object[] rtn = new Object[Array.getLength(obj)]; for( int i=0; i<rtn.length; i++ ) { rtn[i] = Array.get(obj,i); @@ -199,13 +189,9 @@ Class<?> rtnType = m.getReturnType(); if( rtnType == Void.TYPE ) return RTN_EMPTY; - if( rtnType.isArray() ) { - rtnType = rtnType.getComponentType(); - if( isNumber(rtnType) ) - return RTN_NUMBER_ARRAY; - return RTN_ARRAY; - } - return RTN_ONE; + if( rtnType.isArray() && isNumber(rtnType.getComponentType()) ) + return RTN_NUMBER_ARRAY; + return RTN_SAME; } private static boolean isNumber(Class<?> rtnType) {