Mercurial Hosting > luan
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() ) {