annotate core/src/luan/LuanState.java @ 409:abce9b0041b0

remove LuanState.require(), eval() is good enough
author Franklin Schmidt <fschmidt@gmail.com>
date Wed, 29 Apr 2015 15:26:54 -0600
parents 1b38de2b1845
children 8fbb961aabd5
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
1 package luan;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
2
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
3 import java.util.List;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
4 import java.util.ArrayList;
166
4eaee12f6c65 move luan/interp to impl
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 163
diff changeset
5 import luan.impl.LuanCompiler;
168
ebe9db183eb7 rename *Lib.java to *Luan.java
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 167
diff changeset
6 import luan.modules.BasicLuan;
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
9 public abstract class LuanState implements DeepCloneable<LuanState> {
130
0594c132888b cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 128
diff changeset
10
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
11 final List<StackTraceElement> stackTrace = new ArrayList<StackTraceElement>();
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 86
diff changeset
12
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
13 private LuanTable registry;
73
f86e4f77ef32 add package module
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
14
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
15 protected LuanState() {
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
16 registry = new LuanTable();
200
9fb218211763 add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 199
diff changeset
17 }
9fb218211763 add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 199
diff changeset
18
202
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
19 protected LuanState(LuanState luan) {}
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
20
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
21 @Override public void deepenClone(LuanState clone,DeepCloner cloner) {
202
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
22 clone.registry = cloner.deepClone(registry);
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
23 }
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
24
86
6db8f286fa6c _ENV is per module, not global
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 84
diff changeset
25 public abstract LuanTable currentEnvironment();
301
a6bf8ff720f8 add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 300
diff changeset
26 public abstract LuanSource currentSource();
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
27
202
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
28 public final LuanTable registry() {
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
29 return registry;
108
3c404a296995 make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 91
diff changeset
30 }
3c404a296995 make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 91
diff changeset
31
400
8f1be9704726 change LuanState.newStandard() to newInstance() which doesn't preload anything
Franklin Schmidt <fschmidt@gmail.com>
parents: 398
diff changeset
32 public static LuanState newInstance() {
8f1be9704726 change LuanState.newStandard() to newInstance() which doesn't preload anything
Franklin Schmidt <fschmidt@gmail.com>
parents: 398
diff changeset
33 return LuanCompiler.newLuanState();
59
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
34 }
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
35
320
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
36 public final Object eval(String cmd) throws LuanException {
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
37 return eval(cmd,new LuanTable());
157
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 150
diff changeset
38 }
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 150
diff changeset
39
320
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
40 public final Object eval(String cmd,LuanTable env) throws LuanException {
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
41 LuanFunction fn = BasicLuan.load(this,cmd,"eval",env,true);
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
42 return call(fn);
59
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
43 }
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
44
88
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 86
diff changeset
45 public final LuanBit bit(LuanElement el) {
6ca02b188dba add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 86
diff changeset
46 return new LuanBit(this,el);
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
47 }
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
48
404
d55e873e1f0d metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 400
diff changeset
49 public final static Object getHandler(String op,LuanTable table) {
224
05eb2837ddbf change LuanTable.put() to not return old value
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
50 LuanTable t = table.getMetatable();
05eb2837ddbf change LuanTable.put() to not return old value
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
51 return t==null ? null : t.get(op);
05eb2837ddbf change LuanTable.put() to not return old value
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
52 }
05eb2837ddbf change LuanTable.put() to not return old value
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 221
diff changeset
53
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
54 // convenience methods
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
55
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
56 private final LuanBit JAVA = bit(LuanElement.JAVA);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
57
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
58 public LuanException exception(Object msg) {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
59 return JAVA.exception(msg);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
60 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
61
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
62 public Object call(LuanFunction fn) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
63 return call(fn,null,LuanFunction.NOTHING);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
64 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
65
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
66 public Object call(LuanFunction fn,String fnName) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
67 return call(fn,fnName,LuanFunction.NOTHING);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
68 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
69
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
70 public Object call(LuanFunction fn,Object[] args) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
71 return call(fn,null,args);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
72 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
73
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
74 public Object call(LuanFunction fn,String fnName,Object[] args) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
75 return JAVA.call(fn,fnName,args);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
76 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
77
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
78 public LuanFunction checkFunction(Object obj) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
79 return JAVA.checkFunction(obj);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
80 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
81
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
82 public String toString(Object obj) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
83 return JAVA.toString(obj);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
84 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
85
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
86 public String repr(Object obj) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
87 return JAVA.repr(obj);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
88 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
89
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
90 public boolean isLessThan(Object o1,Object o2) throws LuanException {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
91 return JAVA.isLessThan(o1,o2);
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
92 }
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
93 }