Mercurial Hosting > luan
diff src/luan/LuanState.java @ 1267:9fa8b8389578
add LuanTable.luan;
support metatable __gc();
add luan.sql;
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 12 Nov 2018 02:10:41 -0700 |
parents | d41997776788 |
children | 503bde9a7c80 |
line wrap: on
line diff
--- a/src/luan/LuanState.java Sun Sep 30 19:10:48 2018 -0600 +++ b/src/luan/LuanState.java Mon Nov 12 02:10:41 2018 -0700 @@ -1,9 +1,14 @@ package luan; +import java.lang.reflect.Array; import java.io.Closeable; import java.io.IOException; import java.util.Map; import java.util.HashMap; +import java.util.List; +import java.util.ArrayList; +import java.util.Set; +import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import luan.impl.LuanCompiler; @@ -64,7 +69,7 @@ public String toString(Object obj) throws LuanException { if( obj instanceof LuanTable ) { LuanTable tbl = (LuanTable)obj; - return tbl.toString(this); + return tbl.toStringLuan(); } if( obj == null ) return "nil"; @@ -78,7 +83,7 @@ public Object index(Object obj,Object key) throws LuanException { if( obj instanceof LuanTable ) { LuanTable tbl = (LuanTable)obj; - return tbl.get(this,key); + return tbl.get(key); } if( obj != null && javaOk.ok ) return JavaLuan.__index(this,obj,key); @@ -121,9 +126,41 @@ } public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException { - Object f = t.getHandler(this,op); + Object f = t.getHandler(op); if( f == null ) return null; return Luan.checkFunction(f); } + + public LuanTable toTable(Object obj) { + if( obj == null ) + return null; + if( obj instanceof LuanTable ) + return (LuanTable)obj; + if( obj instanceof List ) { + return new LuanTable(this,(List)obj); + } + if( obj instanceof Map ) { + return new LuanTable(this,(Map)obj); + } + if( obj instanceof Set ) { + return new LuanTable(this,(Set)obj); + } + Class cls = obj.getClass(); + if( cls.isArray() ) { + if( cls.getComponentType().isPrimitive() ) { + int len = Array.getLength(obj); + List list = new ArrayList(); + for( int i=0; i<len; i++ ) { + list.add(Array.get(obj,i)); + } + return new LuanTable(this,list); + } else { + Object[] a = (Object[])obj; + return new LuanTable(this,Arrays.asList(a)); + } + } + return null; + } + }