annotate core/src/luan/LuanState.java @ 576:4723d22062ce

remove LuanBit
author Franklin Schmidt <fschmidt@gmail.com>
date Mon, 13 Jul 2015 20:38:26 -0600
parents 7c3ad6db8ac3
children 60c549d43988
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
527
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
3 import java.io.Closeable;
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
4 import java.io.IOException;
521
8a217fe5b4f3 cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents: 517
diff changeset
5 import java.lang.ref.Reference;
8a217fe5b4f3 cleaner LuanState.onClose()
Franklin Schmidt <fschmidt@gmail.com>
parents: 517
diff changeset
6 import java.lang.ref.WeakReference;
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
7 import java.util.List;
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
8 import java.util.ArrayList;
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
9 import java.util.Map;
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
10 import java.util.HashMap;
166
4eaee12f6c65 move luan/interp to impl
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 163
diff changeset
11 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
12 import luan.modules.BasicLuan;
575
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
13 import luan.modules.JavaLuan;
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
14
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
15
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
16 public abstract class LuanState implements DeepCloneable {
130
0594c132888b cleanup
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 128
diff changeset
17
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
18 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
19
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
20 private Map registry;
527
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
21 private final List<Reference<Closeable>> onClose = new ArrayList<Reference<Closeable>>();
73
f86e4f77ef32 add package module
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 66
diff changeset
22
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
23 protected LuanState() {
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
24 registry = new HashMap();
200
9fb218211763 add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 199
diff changeset
25 }
9fb218211763 add Package.block();
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 199
diff changeset
26
202
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
27 protected LuanState(LuanState luan) {}
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
28
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
29 @Override public void deepenClone(DeepCloneable clone,DeepCloner cloner) {
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
30 ((LuanState)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
31 }
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
32
503
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 502
diff changeset
33 public abstract boolean hasJava();
92c3d22745b8 make _ENV optional
Franklin Schmidt <fschmidt@gmail.com>
parents: 502
diff changeset
34 public abstract void setJava();
301
a6bf8ff720f8 add java security
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 300
diff changeset
35 public abstract LuanSource currentSource();
77
4bf3d0c0b6b9 make LuanState cloneable
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 75
diff changeset
36
433
c6bcb8859b93 make LuanState.registry a Map;
Franklin Schmidt <fschmidt@gmail.com>
parents: 430
diff changeset
37 public final Map registry() {
202
75750ceb45ee add LuanState.registry
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 200
diff changeset
38 return registry;
108
3c404a296995 make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 91
diff changeset
39 }
3c404a296995 make Package module more standard;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 91
diff changeset
40
527
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
41 public void onClose(Closeable c) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
42 onClose.add(new WeakReference<Closeable>(c));
517
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
43 }
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
44
527
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
45 public void close() throws IOException {
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
46 for( Reference<Closeable> ref : onClose ) {
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
47 Closeable c = ref.get();
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
48 if( c != null )
Franklin Schmidt <fschmidt@gmail.com>
parents: 521
diff changeset
49 c.close();
517
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
50 }
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
51 onClose.clear();
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
52 }
8dcf9e12446b add Luan.on_luan_close()
Franklin Schmidt <fschmidt@gmail.com>
parents: 509
diff changeset
53
400
8f1be9704726 change LuanState.newStandard() to newInstance() which doesn't preload anything
Franklin Schmidt <fschmidt@gmail.com>
parents: 398
diff changeset
54 public static LuanState newInstance() {
8f1be9704726 change LuanState.newStandard() to newInstance() which doesn't preload anything
Franklin Schmidt <fschmidt@gmail.com>
parents: 398
diff changeset
55 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
56 }
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
57
320
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
58 public final Object eval(String cmd) throws LuanException {
408
1b38de2b1845 merge LuanTableImpl into LuanTable
Franklin Schmidt <fschmidt@gmail.com>
parents: 404
diff changeset
59 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
60 }
1de3e4a6e82d remove LuanJavaFunction.RTN_NUMBER_ARRAY;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 150
diff changeset
61
320
fed1893821bf remove global namespace
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 319
diff changeset
62 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
63 LuanFunction fn = BasicLuan.load(this,cmd,"eval",env,true);
574
6cc2f047019b remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents: 572
diff changeset
64 return fn.call(this);
59
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
65 }
5c9cadd0acce move standard calls from CmdLine to LuanState
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 49
diff changeset
66
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
67
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
68
481
5d4a78c93383 luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents: 460
diff changeset
69 public LuanException exception(Object msg) throws LuanException {
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
70 return new LuanException(this,msg);
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
71 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
72
443
bf5e62a9090c remove toBoolean() and to_boolean()
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
73 public Boolean checkBoolean(Object obj) throws LuanException {
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
74 if( obj instanceof Boolean )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
75 return (Boolean)obj;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
76 throw exception( "attempt to use '"+context()+"' (a " + Luan.type(obj) + " value) as a boolean" );
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
77 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
78
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
79 public Boolean checkBoolean(Object obj,LuanElement el) throws LuanException {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
80 push(el,null);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
81 try {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
82 return checkBoolean(obj);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
83 } finally {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
84 pop();
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
85 }
443
bf5e62a9090c remove toBoolean() and to_boolean()
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
86 }
bf5e62a9090c remove toBoolean() and to_boolean()
Franklin Schmidt <fschmidt@gmail.com>
parents: 433
diff changeset
87
430
f28320fd671d fix LuanTable.toString() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents: 423
diff changeset
88 public String checkString(Object obj) throws LuanException {
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
89 if( obj instanceof String )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
90 return (String)obj;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
91 throw exception( "attempt to use '"+context()+"' (a " + Luan.type(obj) + " value) as a string" );
430
f28320fd671d fix LuanTable.toString() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents: 423
diff changeset
92 }
f28320fd671d fix LuanTable.toString() to use metatables
Franklin Schmidt <fschmidt@gmail.com>
parents: 423
diff changeset
93
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
94 public LuanFunction checkFunction(Object obj) throws LuanException {
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
95 if( obj instanceof LuanFunction )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
96 return (LuanFunction)obj;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
97 throw exception( "attempt to call '"+context()+"' (a " + Luan.type(obj) + " value)" );
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
98 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
99
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
100 public boolean isLessThan(Object o1,Object o2) throws LuanException {
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
101 if( o1 instanceof Number && o2 instanceof Number ) {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
102 Number n1 = (Number)o1;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
103 Number n2 = (Number)o2;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
104 return n1.doubleValue() < n2.doubleValue();
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
105 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
106 if( o1 instanceof String && o2 instanceof String ) {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
107 String s1 = (String)o1;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
108 String s2 = (String)o2;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
109 return s1.compareTo(s2) < 0;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
110 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
111 LuanFunction fn = getBinHandler("__lt",o1,o2);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
112 if( fn != null )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
113 return checkBoolean( Luan.first(fn.call(this,new Object[]{o1,o2})) );
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
114 throw exception( "attempt to compare " + Luan.type(o1) + " with " + Luan.type(o2) );
199
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 195
diff changeset
115 }
575
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
116
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
117 public String toString(Object obj) throws LuanException {
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
118 if( obj instanceof LuanTable ) {
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
119 LuanTable tbl = (LuanTable)obj;
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
120 return tbl.toString(this);
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
121 }
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
122 if( obj == null )
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
123 return "nil";
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
124 if( obj instanceof Number )
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
125 return Luan.toString((Number)obj);
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
126 if( obj instanceof byte[] )
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
127 return "binary: " + Integer.toHexString(obj.hashCode());
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
128 return obj.toString();
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
129 }
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
130
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
131 public String toString(Object obj,LuanElement el) throws LuanException {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
132 push(el,null);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
133 try {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
134 return toString(obj);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
135 } finally {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
136 pop();
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
137 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
138 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
139
575
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
140 public Object index(Object obj,Object key) throws LuanException {
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
141 if( obj instanceof LuanTable ) {
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
142 LuanTable tbl = (LuanTable)obj;
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
143 return tbl.get(this,key);
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
144 }
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
145 if( obj != null && hasJava() )
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
146 return JavaLuan.__index(this,obj,key,false);
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
147 throw exception( "attempt to index a " + Luan.type(obj) + " value in '"+context()+"'" );
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
148 }
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
149
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
150 public String context() {
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
151 return stackTrace.get(stackTrace.size()-1).call.text();
7c3ad6db8ac3 make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents: 574
diff changeset
152 }
576
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
153
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
154 public void push(LuanElement el,String fnName) {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
155 if( el == null ) throw new RuntimeException();
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
156 stackTrace.add( new StackTraceElement(el,fnName) );
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
157 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
158
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
159 public void pop() {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
160 stackTrace.remove(stackTrace.size()-1);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
161 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
162
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
163 public LuanFunction getBinHandler(String op,Object o1,Object o2) throws LuanException {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
164 if( o1 instanceof LuanTable ) {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
165 LuanFunction f1 = getHandlerFunction(op,(LuanTable)o1);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
166 if( f1 != null )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
167 return f1;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
168 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
169 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
170 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
171
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
172 public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
173 Object f = t.getHandler(op);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
174 if( f == null )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
175 return null;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
176 return checkFunction(f);
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
177 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
178
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
179 public void dumpStack() {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
180 System.err.println( stackTrace );
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
181 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
182 /*
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
183 public Number checkNumber(Object obj) throws LuanException {
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
184 if( obj instanceof Number )
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
185 return (Number)obj;
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
186 throw exception( "attempt to perform arithmetic on '"+context()+"' (a " + Luan.type(obj) + " value)" );
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
187 }
4723d22062ce remove LuanBit
Franklin Schmidt <fschmidt@gmail.com>
parents: 575
diff changeset
188 */
48
64ecb7a3aad7 rename Lua to Luan
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff changeset
189 }