comparison 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
comparison
equal deleted inserted replaced
1266:05934fbf635a 1267:9fa8b8389578
1 package luan; 1 package luan;
2 2
3 import java.lang.reflect.Array;
3 import java.io.Closeable; 4 import java.io.Closeable;
4 import java.io.IOException; 5 import java.io.IOException;
5 import java.util.Map; 6 import java.util.Map;
6 import java.util.HashMap; 7 import java.util.HashMap;
8 import java.util.List;
9 import java.util.ArrayList;
10 import java.util.Set;
11 import java.util.Arrays;
7 import org.slf4j.Logger; 12 import org.slf4j.Logger;
8 import org.slf4j.LoggerFactory; 13 import org.slf4j.LoggerFactory;
9 import luan.impl.LuanCompiler; 14 import luan.impl.LuanCompiler;
10 import luan.modules.BasicLuan; 15 import luan.modules.BasicLuan;
11 import luan.modules.JavaLuan; 16 import luan.modules.JavaLuan;
62 */ 67 */
63 68
64 public String toString(Object obj) throws LuanException { 69 public String toString(Object obj) throws LuanException {
65 if( obj instanceof LuanTable ) { 70 if( obj instanceof LuanTable ) {
66 LuanTable tbl = (LuanTable)obj; 71 LuanTable tbl = (LuanTable)obj;
67 return tbl.toString(this); 72 return tbl.toStringLuan();
68 } 73 }
69 if( obj == null ) 74 if( obj == null )
70 return "nil"; 75 return "nil";
71 if( obj instanceof Number ) 76 if( obj instanceof Number )
72 return Luan.toString((Number)obj); 77 return Luan.toString((Number)obj);
76 } 81 }
77 82
78 public Object index(Object obj,Object key) throws LuanException { 83 public Object index(Object obj,Object key) throws LuanException {
79 if( obj instanceof LuanTable ) { 84 if( obj instanceof LuanTable ) {
80 LuanTable tbl = (LuanTable)obj; 85 LuanTable tbl = (LuanTable)obj;
81 return tbl.get(this,key); 86 return tbl.get(key);
82 } 87 }
83 if( obj != null && javaOk.ok ) 88 if( obj != null && javaOk.ok )
84 return JavaLuan.__index(this,obj,key); 89 return JavaLuan.__index(this,obj,key);
85 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" ); 90 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" );
86 } 91 }
119 } 124 }
120 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null; 125 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null;
121 } 126 }
122 127
123 public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException { 128 public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException {
124 Object f = t.getHandler(this,op); 129 Object f = t.getHandler(op);
125 if( f == null ) 130 if( f == null )
126 return null; 131 return null;
127 return Luan.checkFunction(f); 132 return Luan.checkFunction(f);
128 } 133 }
134
135 public LuanTable toTable(Object obj) {
136 if( obj == null )
137 return null;
138 if( obj instanceof LuanTable )
139 return (LuanTable)obj;
140 if( obj instanceof List ) {
141 return new LuanTable(this,(List)obj);
142 }
143 if( obj instanceof Map ) {
144 return new LuanTable(this,(Map)obj);
145 }
146 if( obj instanceof Set ) {
147 return new LuanTable(this,(Set)obj);
148 }
149 Class cls = obj.getClass();
150 if( cls.isArray() ) {
151 if( cls.getComponentType().isPrimitive() ) {
152 int len = Array.getLength(obj);
153 List list = new ArrayList();
154 for( int i=0; i<len; i++ ) {
155 list.add(Array.get(obj,i));
156 }
157 return new LuanTable(this,list);
158 } else {
159 Object[] a = (Object[])obj;
160 return new LuanTable(this,Arrays.asList(a));
161 }
162 }
163 return null;
164 }
165
129 } 166 }