annotate src/luan/Luan.java @ 1802:ca98dee04e08 default tip

add Parsers.json_null
author Franklin Schmidt <fschmidt@gmail.com>
date Sun, 21 Apr 2024 21:25:15 -0600
parents 8df0b80e715e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 package luan;
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
1454
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
3 import java.lang.reflect.Array;
1424
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
4 import java.io.IOException;
318
4fe6c9fed486 add html processing
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 296
diff changeset
5 import java.util.List;
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
6 import java.util.ArrayList;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
7 import java.util.Map;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
8 import java.util.HashMap;
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
9 import java.util.LinkedHashMap;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
10 import java.util.Iterator;
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
11 import java.util.Arrays;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
12 import java.util.Set;
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
13 import java.util.Collection;
1590
bce893009f90 add java compiler check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1580
diff changeset
14 import javax.tools.ToolProvider;
1402
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1401
diff changeset
15 import goodjava.logging.Logger;
27efb1fcbcb5 move luan.lib to goodjava
Franklin Schmidt <fschmidt@gmail.com>
parents: 1401
diff changeset
16 import goodjava.logging.LoggerFactory;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
17 import luan.modules.JavaLuan;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
18 import luan.modules.PackageLuan;
1424
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
19 import luan.modules.IoLuan;
1393
cc0dbca576dc better logging
Franklin Schmidt <fschmidt@gmail.com>
parents: 1337
diff changeset
20 import luan.modules.logging.LuanLogger;
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
21 import luan.impl.LuanCompiler;
134
b585d0915621 remove CmdLine.java and move code to Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
22
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
23
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
24 public final class Luan {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
25 private static final Logger logger = LoggerFactory.getLogger(Luan.class);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
26
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
27 private final List<LuanClosure> stack = new ArrayList<LuanClosure>();
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
28 private final Map registry;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
29 private final Map localOnly = new HashMap();
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
30
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
31 public Luan() {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
32 registry = new HashMap();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
33 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
34
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
35 public Luan(Luan luan) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
36 LuanMutable.makeImmutable(luan.registry);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
37 this.registry = clone(luan.registry);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
38 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
39
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
40 private static Object[] clone(Object[] obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
41 if( obj.length == 0 )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
42 return obj;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
43 Object[] rtn = obj.clone();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
44 for( int i=0; i<rtn.length; i++ ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
45 rtn[i] = clone(rtn[i]);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
46 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
47 return rtn;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
48 }
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
49
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
50 private static Map clone(Map obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
51 Map rtn;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
52 try {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
53 rtn = obj.getClass().newInstance();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
54 } catch(InstantiationException e) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
55 throw new RuntimeException(e);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
56 } catch(IllegalAccessException e) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
57 throw new RuntimeException(e);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
58 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
59 for( Object stupid : obj.entrySet() ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
60 Map.Entry entry = (Map.Entry)stupid;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
61 rtn.put( clone(entry.getKey()), clone(entry.getValue()) );
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
62 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
63 return rtn;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
64 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
65
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
66 private static Collection clone(Collection obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
67 Collection rtn;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
68 try {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
69 rtn = obj.getClass().newInstance();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
70 } catch(InstantiationException e) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
71 throw new RuntimeException(e);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
72 } catch(IllegalAccessException e) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
73 throw new RuntimeException(e);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
74 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
75 for( Object entry : (Collection)obj ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
76 rtn.add( clone(entry) );
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
77 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
78 return rtn;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
79 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
80
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
81 private static Object clone(Object obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
82 if( obj instanceof Object[] )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
83 return clone((Object[])obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
84 if( obj instanceof Map )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
85 return clone((Map)obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
86 if( obj instanceof Collection )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
87 return clone((Collection)obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
88 return obj;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
89 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
90
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
91 private Map clonedLocals(Object obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
92 Map locals = (Map)registry.get("Luan.local");
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
93 if( locals==null ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
94 locals = new HashMap();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
95 registry.put("Luan.local",locals);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
96 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
97 Map local = (Map)locals.get(obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
98 if( local==null ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
99 local = new HashMap();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
100 locals.put(obj,local);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
101 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
102 return local;
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
103 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
104
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
105 public Object getLocalCloned(Object obj,Object key) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
106 return clonedLocals(obj).get(key);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
107 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
108
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
109 public void setLocalCloned(Object obj,Object key,Object value) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
110 if( value==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
111 clonedLocals(obj).remove(key);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
112 else
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
113 clonedLocals(obj).put(key,value);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
114 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
115
1763
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
116 public LuanFunction pairsLocalCloned(Object obj) throws LuanException {
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
117 return new LuanTable(clonedLocals(obj)).pairs(this);
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
118 }
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
119
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
120 private Map onlyLocals(Object obj) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
121 Map local = (Map)localOnly.get(obj);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
122 if( local==null ) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
123 local = new HashMap();
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
124 localOnly.put(obj,local);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
125 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
126 return local;
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
127 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
128
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
129 public Object getLocalOnly(Object obj,Object key) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
130 return onlyLocals(obj).get(key);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
131 }
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
132
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
133 public void setLocalOnly(Object obj,Object key,Object value) {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
134 if( value==null )
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
135 onlyLocals(obj).remove(key);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
136 else
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
137 onlyLocals(obj).put(key,value);
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
138 }
1561
e1a13e707bf3 start immutable
Franklin Schmidt <fschmidt@gmail.com>
parents: 1464
diff changeset
139
1763
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
140 public LuanFunction pairsLocalOnly(Object obj) throws LuanException {
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
141 return new LuanTable(onlyLocals(obj)).pairs(this);
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
142 }
164c6ea53147 fix change_password
Franklin Schmidt <fschmidt@gmail.com>
parents: 1685
diff changeset
143
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
144 public LuanClosure peek() {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
145 return peek(1);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
146 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
147
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
148 public LuanClosure peek(int i) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
149 int n = stack.size();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
150 return n < i ? null : stack.get(n-i);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
151 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
152
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
153 void push(LuanClosure closure) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
154 stack.add(closure);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
155 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
156
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
157 void pop() {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
158 stack.remove(stack.size()-1);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
159 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
160
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
161 public Map registry() {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
162 return registry;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
163 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
164
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
165 public Object eval(String cmd,Object... args) throws LuanException {
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
166 return load(cmd,"eval",false).call(this,args);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
167 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
168
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
169 public Object require(String modName) throws LuanException {
1580
2975c932864d require options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1578
diff changeset
170 return require(modName,null);
2975c932864d require options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1578
diff changeset
171 }
2975c932864d require options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1578
diff changeset
172
2975c932864d require options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1578
diff changeset
173 public Object require(String modName,LuanTable options) throws LuanException {
2975c932864d require options
Franklin Schmidt <fschmidt@gmail.com>
parents: 1578
diff changeset
174 return PackageLuan.require(this,modName,options);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
175 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
176
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
177 public String luanToString(Object obj) throws LuanException {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
178 if( obj instanceof LuanTable ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
179 LuanTable tbl = (LuanTable)obj;
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
180 return tbl.toStringLuan(this);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
181 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
182 if( obj == null )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
183 return "nil";
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
184 if( obj instanceof Number )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
185 return Luan.toString((Number)obj);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
186 if( obj instanceof byte[] )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
187 return "binary: " + Integer.toHexString(obj.hashCode());
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
188 return obj.toString();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
189 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
190
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
191 public Object index(Object obj,Object key) throws LuanException {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
192 if( obj instanceof LuanTable ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
193 LuanTable tbl = (LuanTable)obj;
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
194 return tbl.get(this,key);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
195 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
196 if( obj != null && peek().javaOk )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
197 return JavaLuan.__index(this,obj,key);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
198 throw new LuanException("attempt to index a " + Luan.type(obj) + " value" );
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
199 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
200
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
201
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
202 public boolean isLessThan(Object o1,Object o2) throws LuanException {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
203 if( o1 instanceof Number && o2 instanceof Number ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
204 Number n1 = (Number)o1;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
205 Number n2 = (Number)o2;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
206 return n1.doubleValue() < n2.doubleValue();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
207 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
208 if( o1 instanceof String && o2 instanceof String ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
209 String s1 = (String)o1;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
210 String s2 = (String)o2;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
211 return s1.compareTo(s2) < 0;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
212 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
213 LuanFunction fn = getBinHandler("__lt",o1,o2);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
214 if( fn != null )
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
215 return Luan.checkBoolean( Luan.first(fn.call(this,o1,o2)) );
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
216 throw new LuanException( "attempt to compare " + Luan.type(o1) + " with " + Luan.type(o2) );
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
217 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
218
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
219 public LuanFunction getBinHandler(String op,Object o1,Object o2) throws LuanException {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
220 if( o1 instanceof LuanTable ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
221 LuanFunction f1 = getHandlerFunction(op,(LuanTable)o1);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
222 if( f1 != null )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
223 return f1;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
224 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
225 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
226 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
227
1578
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
228 public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException {
c922446f53aa immutable threading
Franklin Schmidt <fschmidt@gmail.com>
parents: 1563
diff changeset
229 Object f = t.getHandler(this,op);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
230 if( f == null )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
231 return null;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
232 return Luan.checkFunction(f);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
233 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
234
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
235 public LuanTable toTable(Object obj) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
236 if( obj == null )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
237 return null;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
238 if( obj instanceof LuanTable )
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
239 return (LuanTable)obj;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
240 if( obj instanceof List ) {
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
241 return new LuanTable((List)obj);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
242 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
243 if( obj instanceof Map ) {
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
244 return new LuanTable((Map)obj);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
245 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
246 if( obj instanceof Set ) {
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
247 return new LuanTable((Set)obj);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
248 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
249 Class cls = obj.getClass();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
250 if( cls.isArray() ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
251 if( cls.getComponentType().isPrimitive() ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
252 int len = Array.getLength(obj);
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
253 List list = new ArrayList();
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
254 for( int i=0; i<len; i++ ) {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
255 list.add(Array.get(obj,i));
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
256 }
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
257 return new LuanTable(list);
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
258 } else {
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
259 Object[] a = (Object[])obj;
1562
b89212fd04b5 remove table.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1561
diff changeset
260 return new LuanTable(Arrays.asList(a));
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
261 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
262 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
263 return null;
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
264 }
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
265
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
266
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
267
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
268 // static
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
269
1685
46cf5137cb6b misc fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1590
diff changeset
270 public static String[] args = null;
46cf5137cb6b misc fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1590
diff changeset
271
481
5d4a78c93383 luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 446
diff changeset
272 public static void main(String[] args) throws LuanException {
1590
bce893009f90 add java compiler check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1580
diff changeset
273 if( ToolProvider.getSystemJavaCompiler()==null )
bce893009f90 add java compiler check
Franklin Schmidt <fschmidt@gmail.com>
parents: 1580
diff changeset
274 throw new LuanException("java compiler not available");
1685
46cf5137cb6b misc fixes
Franklin Schmidt <fschmidt@gmail.com>
parents: 1590
diff changeset
275 Luan.args = args;
1454
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
276 Luan luan = new Luan();
1424
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
277 LuanFunction fn = loadClasspath(luan,"luan/cmd_line.luan");
1563
8fbcc4747091 remove LuanFunction.luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 1562
diff changeset
278 fn.call(luan,(Object[])args);
134
b585d0915621 remove CmdLine.java and move code to Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 113
diff changeset
279 }
1454
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
280
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
281 public static LuanFunction loadClasspath(Luan luan,String classpath)
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
282 throws LuanException
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
283 {
1424
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
284 try {
1454
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
285 String src = IoLuan.classpath(luan,classpath).read_text();
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
286 return luan.load(src,"classpath:"+classpath,true);
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
287 } catch(IOException e) {
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
288 throw new RuntimeException(e);
1424
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
289 }
9ab267b9427c better load_file()
Franklin Schmidt <fschmidt@gmail.com>
parents: 1402
diff changeset
290 }
1454
219f2b937f2b remove log4j
Franklin Schmidt <fschmidt@gmail.com>
parents: 1442
diff changeset
291
111
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
292 public static Object first(Object obj) {
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
293 if( !(obj instanceof Object[]) )
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
294 return obj;
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
295 Object[] a = (Object[])obj;
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
296 return a.length==0 ? null : a[0];
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
297 }
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
298
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
299 public static Object[] array(Object obj) {
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
300 return obj instanceof Object[] ? (Object[])obj : new Object[]{obj};
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
301 }
2428ecfed375 change LuanFunction.call() from returning Object[] to returning Object, to reduce garbage collection
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 105
diff changeset
302
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
303 public static String type(Object obj) {
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
304 if( obj == null )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
305 return "nil";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
306 if( obj instanceof String )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
307 return "string";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
308 if( obj instanceof Boolean )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
309 return "boolean";
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
310 if( obj instanceof Number )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
311 return "number";
85
b2551f00bc51 fix type()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
312 if( obj instanceof LuanTable )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
313 return "table";
85
b2551f00bc51 fix type()
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
314 if( obj instanceof LuanFunction )
105
a9560839104d minor - change type names to lower case like Lua
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 104
diff changeset
315 return "function";
113
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 111
diff changeset
316 if( obj instanceof byte[] )
8c706d6eb5dc add binary type
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 111
diff changeset
317 return "binary";
513
0dfc01d8d42d rename type "userdata" to "java"
Franklin Schmidt <fschmidt@gmail.com>
parents: 481
diff changeset
318 return "java";
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
319 }
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
320
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
321 public static String toString(Number n) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
322 if( n instanceof Integer )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
323 return n.toString();
255
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
324 int i = n.intValue();
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
325 if( i == n.doubleValue() )
e5ad26746c94 improve toString(Number)
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 226
diff changeset
326 return Integer.toString(i);
46
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
327 String s = n.toString();
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
328 int iE = s.indexOf('E');
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
329 String ending = null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
330 if( iE != -1 ) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
331 ending = s.substring(iE);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
332 s = s.substring(0,iE);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
333 }
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
334 if( s.endsWith(".0") )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
335 s = s.substring(0,s.length()-2);
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
336 if( ending != null )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
337 s += ending;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
338 return s;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
339 }
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
340
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
341 public static Integer asInteger(Object obj) {
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
342 if( obj instanceof Integer )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
343 return (Integer)obj;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
344 if( !(obj instanceof Number) )
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
345 return null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
346 Number n = (Number)obj;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
347 int i = n.intValue();
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
348 return i==n.doubleValue() ? Integer.valueOf(i) : null;
a443637829c1 remove LuaNumber
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 44
diff changeset
349 }
66
f7e17cfb35f9 minor toString() improvement
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 48
diff changeset
350
1442
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
351 public static Long asLong(Object obj) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
352 if( obj instanceof Long )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
353 return (Long)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
354 if( !(obj instanceof Number) )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
355 return null;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
356 Number n = (Number)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
357 long i = n.longValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
358 return i==n.doubleValue() ? Long.valueOf(i) : null;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
359 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
360
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
361 public static Float asFloat(Object obj) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
362 if( obj instanceof Float )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
363 return (Float)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
364 if( !(obj instanceof Number) )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
365 return null;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
366 Number n = (Number)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
367 float i = n.floatValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
368 return i==n.doubleValue() ? Float.valueOf(i) : null;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
369 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
370
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
371 public static Double asDouble(Object obj) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
372 if( obj instanceof Double )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
373 return (Double)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
374 if( !(obj instanceof Number) )
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
375 return null;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
376 Number n = (Number)obj;
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
377 double i = n.doubleValue();
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
378 return Double.valueOf(i);
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
379 }
Franklin Schmidt <fschmidt@gmail.com>
parents: 1434
diff changeset
380
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
381 public static String stringEncode(String s) {
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
382 s = s.replace("\\","\\\\");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
383 s = s.replace("\u0007","\\a");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
384 s = s.replace("\b","\\b");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
385 s = s.replace("\f","\\f");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
386 s = s.replace("\n","\\n");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
387 s = s.replace("\r","\\r");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
388 s = s.replace("\t","\\t");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
389 s = s.replace("\u000b","\\v");
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
390 s = s.replace("\"","\\\"");
420
e9d4d5854e54 add String.encode
Franklin Schmidt <fschmidt@gmail.com>
parents: 419
diff changeset
391 s = s.replace("\'","\\'");
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
392 return s;
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
393 }
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 85
diff changeset
394
647
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
395
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
396 public static Boolean checkBoolean(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
397 if( obj instanceof Boolean )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
398 return (Boolean)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
399 throw new LuanException("attempt to use a " + Luan.type(obj) + " value as a boolean" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
400 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
401
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
402 public static String checkString(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
403 if( obj instanceof String )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
404 return (String)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
405 throw new LuanException("attempt to use a " + Luan.type(obj) + " value as a string" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
406 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
407
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
408 public static LuanFunction checkFunction(Object obj) throws LuanException {
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
409 if( obj instanceof LuanFunction )
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
410 return (LuanFunction)obj;
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
411 throw new LuanException("attempt to call a " + Luan.type(obj) + " value" );
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
412 }
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
413
1434
56fb5cd8228d cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents: 1432
diff changeset
414 public LuanFunction load(String text,String sourceName,boolean persist,LuanTable env)
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
415 throws LuanException
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
416 {
1434
56fb5cd8228d cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents: 1432
diff changeset
417 return LuanCompiler.compile(this,text,sourceName,persist,env);
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
418 }
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
419
1434
56fb5cd8228d cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents: 1432
diff changeset
420 public LuanFunction load(String text,String sourceName,boolean persist)
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
421 throws LuanException
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
422 {
1434
56fb5cd8228d cache compiled code in temp files
Franklin Schmidt <fschmidt@gmail.com>
parents: 1432
diff changeset
423 return load(text,sourceName,persist,null);
694
b620b8e1010f remove Luan.load() allow_expression param and add Luan.eval()
Franklin Schmidt <fschmidt@gmail.com>
parents: 693
diff changeset
424 }
647
8e8c30b72e9b move methods from LuanState to Luan
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
425
1802
ca98dee04e08 add Parsers.json_null
Franklin Schmidt <fschmidt@gmail.com>
parents: 1766
diff changeset
426 public static Object toJava(Object obj,Object nullValue) throws LuanException {
ca98dee04e08 add Parsers.json_null
Franklin Schmidt <fschmidt@gmail.com>
parents: 1766
diff changeset
427 if( obj == nullValue )
ca98dee04e08 add Parsers.json_null
Franklin Schmidt <fschmidt@gmail.com>
parents: 1766
diff changeset
428 return null;
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
429 if( !(obj instanceof LuanTable) )
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
430 return obj;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
431 LuanTable tbl = (LuanTable)obj;
1464
465b4a0dae4a empty list vs map
Franklin Schmidt <fschmidt@gmail.com>
parents: 1454
diff changeset
432 if( !tbl.isMap() ) {
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
433 List list = new ArrayList();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
434 for( Object el : tbl.asList() ) {
1802
ca98dee04e08 add Parsers.json_null
Franklin Schmidt <fschmidt@gmail.com>
parents: 1766
diff changeset
435 list.add( toJava(el,nullValue) );
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
436 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
437 return list;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
438 } else {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
439 Map map = new LinkedHashMap();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
440 Iterator<Map.Entry> iter = tbl.rawIterator();
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
441 while( iter.hasNext() ) {
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
442 Map.Entry entry = iter.next();
1802
ca98dee04e08 add Parsers.json_null
Franklin Schmidt <fschmidt@gmail.com>
parents: 1766
diff changeset
443 map.put( toJava(entry.getKey(),nullValue), toJava(entry.getValue(),nullValue) );
1113
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
444 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
445 return map;
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
446 }
22652f4020fb add JsonToString
Franklin Schmidt <fschmidt@gmail.com>
parents: 775
diff changeset
447 }
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
448
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
449
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
450 // security
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
451
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
452 public interface Security {
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
453 public void check(Luan luan,LuanClosure closure,String op,Object... args) throws LuanException;
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
454 }
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
455
1766
8df0b80e715e fix scheduled tasks
Franklin Schmidt <fschmidt@gmail.com>
parents: 1763
diff changeset
456 private static final String SECURITY_KEY = "Luan.Security";
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
457
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
458 public static void checkSecurity(Luan luan,String op,Object... args) throws LuanException {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
459 check(luan,1,op,args);
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
460 }
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
461
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
462 public static void checkCallerSecurity(Luan luan,String op,Object... args) throws LuanException {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
463 check(luan,2,op,args);
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
464 }
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
465
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
466 private static void check(Luan luan,int i,String op,Object... args) throws LuanException {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
467 Security s = (Security)luan.registry().get(SECURITY_KEY);
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
468 if( s!=null )
1432
Franklin Schmidt <fschmidt@gmail.com>
parents: 1424
diff changeset
469 s.check(luan,luan.peek(i),op,args);
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
470 }
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
471
1333
25746915a241 merge Luan and LuanState
Franklin Schmidt <fschmidt@gmail.com>
parents: 1330
diff changeset
472 public static Security setSecurity(Luan luan,Security s) {
1330
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
473 return (Security)luan.registry().put(SECURITY_KEY,s);
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
474 }
f41919741100 fix security
Franklin Schmidt <fschmidt@gmail.com>
parents: 1267
diff changeset
475
1
2df768b926aa start Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
476 }