Mercurial Hosting > luan
annotate core/src/luan/LuanBit.java @ 575:7c3ad6db8ac3
make LuanState.JAVA private
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 13 Jul 2015 18:34:31 -0600 |
parents | 6cc2f047019b |
children |
rev | line source |
---|---|
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
1 package luan; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
2 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
3 import java.util.List; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
4 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
5 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
6 public final class LuanBit { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
7 public final LuanState luan; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
8 public final LuanElement el; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
9 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
10 LuanBit(LuanState luan,LuanElement el) { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
11 this.luan = luan; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
12 this.el = el; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
13 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
14 |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
15 public LuanException exception(Object msg) throws LuanException { |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
16 return new LuanException(this,msg); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
17 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
18 |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
19 public StackTraceElement[] stackTrace() { |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
20 List<StackTraceElement> stackTrace = luan.stackTrace; |
460 | 21 if( el != null ) |
481
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
22 stackTrace.add(new StackTraceElement(el,null)); |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
23 StackTraceElement[] rtn = stackTrace.toArray(new StackTraceElement[0]); |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
24 if( el != null ) |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
25 stackTrace.remove(stackTrace.size()-1); |
5d4a78c93383
luan errors are now tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
461
diff
changeset
|
26 return rtn; |
132
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
27 } |
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
28 |
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
29 public void dumpStack() { |
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
30 System.err.println( stackTrace() ); |
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
31 } |
14281d5bd36f
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
130
diff
changeset
|
32 |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
33 public Object call(LuanFunction fn,String fnName,Object[] args) throws LuanException { |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
34 push(fnName); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
35 try { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
36 return fn.call(luan,args); |
459
30544d1a9cbf
better stack overflow handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
446
diff
changeset
|
37 } catch(StackOverflowError e) { |
30544d1a9cbf
better stack overflow handling
Franklin Schmidt <fschmidt@gmail.com>
parents:
446
diff
changeset
|
38 throw exception("stack overflow"); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
39 } finally { |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
40 pop(); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
41 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
42 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
43 |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
44 private void push(String fnName) { |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
45 if( el == null ) throw new RuntimeException(); |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
46 List<StackTraceElement> stackTrace = luan.stackTrace; |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
47 stackTrace.add( new StackTraceElement(el,fnName) ); |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
48 } |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
49 |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
50 private void pop() { |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
51 List<StackTraceElement> stackTrace = luan.stackTrace; |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
52 stackTrace.remove(stackTrace.size()-1); |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
53 } |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
54 |
575
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
55 public String toString(Object obj) throws LuanException { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
56 push(null); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
57 try { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
58 return luan.toString(obj); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
59 } finally { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
60 pop(); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
61 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
62 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
63 |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
64 public Object index(Object obj,Object key) throws LuanException { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
65 push(null); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
66 try { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
67 return luan.index(obj,key); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
68 } finally { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
69 pop(); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
70 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
71 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
72 |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
73 public int length(LuanTable t) throws LuanException { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
74 push(null); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
75 try { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
76 return t.length(luan); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
77 } finally { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
78 pop(); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
79 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
80 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
81 |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
82 public void put(LuanTable t,Object key,Object value) throws LuanException { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
83 push(null); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
84 try { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
85 t.put(luan,key,value); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
86 } finally { |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
87 pop(); |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
88 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
89 } |
7c3ad6db8ac3
make LuanState.JAVA private
Franklin Schmidt <fschmidt@gmail.com>
parents:
574
diff
changeset
|
90 |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
91 public String checkString(Object obj) throws LuanException { |
440
93e6e67768d7
remove Luan.asString()
Franklin Schmidt <fschmidt@gmail.com>
parents:
430
diff
changeset
|
92 if( obj instanceof String ) |
93e6e67768d7
remove Luan.asString()
Franklin Schmidt <fschmidt@gmail.com>
parents:
430
diff
changeset
|
93 return (String)obj; |
460 | 94 if( el != null ) { |
95 throw exception( "attempt to use '"+el.text()+"' (a " + Luan.type(obj) + " value) as a string" ); | |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
96 } else { |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
97 throw exception( "attempt to use a " + Luan.type(obj) + " as a string" ); |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
98 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
100 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
101 public Number checkNumber(Object obj) throws LuanException { |
446
bbad2d06f728
remove automatic conversion from string to number
Franklin Schmidt <fschmidt@gmail.com>
parents:
443
diff
changeset
|
102 if( obj instanceof Number ) |
bbad2d06f728
remove automatic conversion from string to number
Franklin Schmidt <fschmidt@gmail.com>
parents:
443
diff
changeset
|
103 return (Number)obj; |
460 | 104 if( el != null ) { |
105 throw exception( "attempt to perform arithmetic on '"+el.text()+"' (a " + Luan.type(obj) + " value)" ); | |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
106 } else { |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
107 throw exception( "attempt to perform arithmetic on a " + Luan.type(obj) + " value" ); |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
108 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
109 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
110 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
111 public LuanFunction checkFunction(Object obj) throws LuanException { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
112 if( obj instanceof LuanFunction ) |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
113 return (LuanFunction)obj; |
460 | 114 if( el != null ) { |
115 throw exception( "attempt to call '"+el.text()+"' (a " + Luan.type(obj) + " value)" ); | |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
116 } else { |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
117 throw exception( "attempt to call a " + Luan.type(obj) + " value" ); |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
118 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
119 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
120 |
151
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
121 public Boolean checkBoolean(Object obj) throws LuanException { |
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
122 if( obj instanceof Boolean ) |
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
123 return (Boolean)obj; |
460 | 124 if( el != null ) { |
125 throw exception( "attempt to use '"+el.text()+"' (a " + Luan.type(obj) + " value) as a boolean" ); | |
191
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
126 } else { |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
127 throw exception( "attempt to use a " + Luan.type(obj) + " as a boolean" ); |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
128 } |
151
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
129 } |
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
130 |
404
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
131 public LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException { |
419
8fbb961aabd5
improve repr() to check metamethod recursively
Franklin Schmidt <fschmidt@gmail.com>
parents:
416
diff
changeset
|
132 Object f = t.getHandler(op); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
133 if( f == null ) |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
134 return null; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
135 return checkFunction(f); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
136 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
137 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
138 public LuanFunction getBinHandler(String op,Object o1,Object o2) throws LuanException { |
404
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
139 if( o1 instanceof LuanTable ) { |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
140 LuanFunction f1 = getHandlerFunction(op,(LuanTable)o1); |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
141 if( f1 != null ) |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
142 return f1; |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
143 } |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
144 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null; |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
145 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
146 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
147 public boolean isLessThan(Object o1,Object o2) throws LuanException { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
148 if( o1 instanceof Number && o2 instanceof Number ) { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
149 Number n1 = (Number)o1; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
150 Number n2 = (Number)o2; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
151 return n1.doubleValue() < n2.doubleValue(); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
152 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
153 if( o1 instanceof String && o2 instanceof String ) { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
154 String s1 = (String)o1; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
155 String s2 = (String)o2; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
156 return s1.compareTo(s2) < 0; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
157 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
158 LuanFunction fn = getBinHandler("__lt",o1,o2); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
159 if( fn != null ) |
443
bf5e62a9090c
remove toBoolean() and to_boolean()
Franklin Schmidt <fschmidt@gmail.com>
parents:
440
diff
changeset
|
160 return checkBoolean( Luan.first(call(fn,"__lt",new Object[]{o1,o2})) ); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
161 throw exception( "attempt to compare " + Luan.type(o1) + " with " + Luan.type(o2) ); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
162 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
163 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
164 public Object arithmetic(String op,Object o1,Object o2) throws LuanException { |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
165 LuanFunction fn = getBinHandler(op,o1,o2); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
166 if( fn != null ) |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
167 return Luan.first(call(fn,op,new Object[]{o1,o2})); |
446
bbad2d06f728
remove automatic conversion from string to number
Franklin Schmidt <fschmidt@gmail.com>
parents:
443
diff
changeset
|
168 String type = !(o1 instanceof Number) ? Luan.type(o1) : Luan.type(o2); |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
169 throw exception("attempt to perform arithmetic on a "+type+" value"); |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
170 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
171 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
172 } |