Mercurial Hosting > luan
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 } |