diff core/src/luan/LuanJavaFunction.java @ 432:d9df6d6cb927

finish fixing LuanTable to use metatables
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 02 May 2015 23:41:59 -0600
parents 3ffe8ba5b297
children 472fc70853cd
line wrap: on
line diff
--- a/core/src/luan/LuanJavaFunction.java	Sat May 02 21:12:48 2015 -0600
+++ b/core/src/luan/LuanJavaFunction.java	Sat May 02 23:41:59 2015 -0600
@@ -140,7 +140,7 @@
 		}
 	}
 
-	private Object[] fixArgs(LuanState luan,Object[] args) {
+	private Object[] fixArgs(LuanState luan,Object[] args) throws LuanException {
 		int n = argConverters.length;
 		Object[] rtn;
 		int start = 0;
@@ -163,7 +163,7 @@
 					Object varArgs = Array.newInstance(varArgCls,len);
 					ArgConverter ac = argConverters[n];
 					for( int i=0; i<len; i++ ) {
-						Array.set( varArgs, i, ac.convert(args[n+i]) );
+						Array.set( varArgs, i, ac.convert(luan,args[n+i]) );
 					}
 					rtn[rtn.length-1] = varArgs;
 				}
@@ -171,7 +171,7 @@
 			System.arraycopy(args,0,rtn,start,Math.min(args.length,n));
 		}
 		for( int i=0; i<n; i++ ) {
-			rtn[start+i] = argConverters[i].convert(rtn[start+i]);
+			rtn[start+i] = argConverters[i].convert(luan,rtn[start+i]);
 		}
 		return rtn;
 	}
@@ -226,11 +226,11 @@
 	}
 
 	private interface ArgConverter {
-		public Object convert(Object obj);
+		public Object convert(LuanState luan,Object obj) throws LuanException;
 	}
 
 	private static final ArgConverter ARG_SAME = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			return obj;
 		}
 		@Override public String toString() {
@@ -239,7 +239,7 @@
 	};
 
 	private static final ArgConverter ARG_BOOLEAN = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			return Luan.toBoolean(obj);
 		}
 		@Override public String toString() {
@@ -248,7 +248,7 @@
 	};
 
 	private static final ArgConverter ARG_BOOLEAN_OBJ = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			return obj==null ? null : Luan.toBoolean(obj);
 		}
 		@Override public String toString() {
@@ -257,7 +257,7 @@
 	};
 
 	private static final ArgConverter ARG_DOUBLE = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Double )
 				return obj;
 			if( obj instanceof Number ) {
@@ -278,7 +278,7 @@
 	};
 
 	private static final ArgConverter ARG_FLOAT = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Float )
 				return obj;
 			if( obj instanceof Number ) {
@@ -299,7 +299,7 @@
 	};
 
 	private static final ArgConverter ARG_LONG = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Long )
 				return obj;
 			if( obj instanceof Number ) {
@@ -322,7 +322,7 @@
 	};
 
 	private static final ArgConverter ARG_INTEGER = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Integer )
 				return obj;
 			if( obj instanceof Number ) {
@@ -345,7 +345,7 @@
 	};
 
 	private static final ArgConverter ARG_SHORT = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Short )
 				return obj;
 			if( obj instanceof Number ) {
@@ -368,7 +368,7 @@
 	};
 
 	private static final ArgConverter ARG_BYTE = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof Byte )
 				return obj;
 			if( obj instanceof Number ) {
@@ -391,7 +391,7 @@
 	};
 
 	private static final ArgConverter ARG_TABLE = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj == null )
 				return null;
 			if( obj instanceof List ) {
@@ -402,24 +402,12 @@
 			if( obj instanceof Map ) {
 				@SuppressWarnings("unchecked")
 				Map<Object,Object> map = (Map<Object,Object>)obj;
-				LuanTable tbl = new LuanTable();
-				for( Map.Entry<Object,Object> entry : map.entrySet() ) {
-					Object key = entry.getKey();
-					Object value = entry.getValue();
-					if( key != null && value != null )
-						tbl.rawPut(key,value);
-				}
-				return tbl;
+				return new LuanTable(map);
 			}
 			if( obj instanceof Set ) {
 				@SuppressWarnings("unchecked")
 				Set<Object> set = (Set<Object>)obj;
-				LuanTable tbl = new LuanTable();
-				for( Object el : set ) {
-					if( el != null )
-						tbl.rawPut(el,Boolean.TRUE);
-				}
-				return tbl;
+				return new LuanTable(set);
 			}
 			Class cls = obj.getClass();
 			if( cls.isArray() && !cls.getComponentType().isPrimitive() ) {
@@ -434,10 +422,10 @@
 	};
 
 	private static final ArgConverter ARG_MAP = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) throws LuanException {
 			if( obj instanceof LuanTable ) {
 				LuanTable t = (LuanTable)obj;
-				return t.asMap();
+				return t.asMap(luan);
 			}
 			return obj;
 		}
@@ -447,7 +435,7 @@
 	};
 
 	private static final ArgConverter ARG_LIST = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof LuanTable ) {
 				LuanTable t = (LuanTable)obj;
 				if( t.isList() )
@@ -461,11 +449,11 @@
 	};
 
 	private static final ArgConverter ARG_SET = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) throws LuanException {
 			if( obj instanceof LuanTable ) {
 				LuanTable t = (LuanTable)obj;
-				if( t.isSet() )
-					return t.asSet();
+				if( t.isSet(luan) )
+					return t.asSet(luan);
 			}
 			return obj;
 		}
@@ -475,13 +463,13 @@
 	};
 
 	private static final ArgConverter ARG_COLLECTION = new ArgConverter() {
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) throws LuanException {
 			if( obj instanceof LuanTable ) {
 				LuanTable t = (LuanTable)obj;
 				if( t.isList() )
 					return t.asList();
-				if( t.isSet() )
-					return t.asSet();
+				if( t.isSet(luan) )
+					return t.asSet(luan);
 			}
 			return obj;
 		}
@@ -497,7 +485,7 @@
 			a = (Object[])Array.newInstance(cls.getComponentType(),0);
 		}
 
-		public Object convert(Object obj) {
+		public Object convert(LuanState luan,Object obj) {
 			if( obj instanceof LuanTable ) {
 				LuanTable t = (LuanTable)obj;
 				if( t.isList() ) {