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;
 		}
 	};