Mercurial Hosting > luan
diff src/luan/LuanJavaFunction.java @ 55:9381b23ea9e1
various fixes
git-svn-id: https://luan-java.googlecode.com/svn/trunk@56 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Fri, 04 Jan 2013 04:50:18 +0000 |
parents | 8ede219cd111 |
children | c84274b18f0c |
line wrap: on
line diff
--- a/src/luan/LuanJavaFunction.java Mon Dec 31 19:45:06 2012 +0000 +++ b/src/luan/LuanJavaFunction.java Fri Jan 04 04:50:18 2013 +0000 @@ -7,6 +7,7 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Arrays; public final class LuanJavaFunction extends LuanFunction { @@ -44,13 +45,19 @@ } @Override public Object[] call(LuanState luan,Object[] args) throws LuanException { + try { + return rawCall(luan,args); + } catch(IllegalArgumentException e) { + checkArgs(luan,args); + throw e; + } + } + + public Object[] rawCall(LuanState luan,Object[] args) throws LuanException { args = fixArgs(luan,args); Object rtn; try { rtn = method.invoke(obj,args); - } catch(IllegalArgumentException e) { - checkArgs(luan,args); - throw e; } catch(IllegalAccessException e) { throw new RuntimeException(e); } catch(InvocationTargetException e) { @@ -324,6 +331,11 @@ Set<Object> set = (Set<Object>)obj; return new LuanTable(set); } + Class cls = obj.getClass(); + if( cls.isArray() && !cls.getComponentType().isPrimitive() ) { + Object[] a = (Object[])obj; + return new LuanTable(Arrays.asList(a)); + } return obj; } };