Mercurial Hosting > luan
annotate core/src/luan/LuanBit.java @ 574:6cc2f047019b
remove LuanState.call()
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Mon, 13 Jul 2015 12:31:53 -0600 |
parents | f1601a4ce1aa |
children | 7c3ad6db8ac3 |
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 |
574
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
44 public void push(String fnName) { |
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 |
6cc2f047019b
remove LuanState.call()
Franklin Schmidt <fschmidt@gmail.com>
parents:
572
diff
changeset
|
50 public void pop() { |
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 |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
55 public String checkString(Object obj) throws LuanException { |
440
93e6e67768d7
remove Luan.asString()
Franklin Schmidt <fschmidt@gmail.com>
parents:
430
diff
changeset
|
56 if( obj instanceof String ) |
93e6e67768d7
remove Luan.asString()
Franklin Schmidt <fschmidt@gmail.com>
parents:
430
diff
changeset
|
57 return (String)obj; |
460 | 58 if( el != null ) { |
59 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
|
60 } else { |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
61 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
|
62 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
63 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
64 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
65 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
|
66 if( obj instanceof Number ) |
bbad2d06f728
remove automatic conversion from string to number
Franklin Schmidt <fschmidt@gmail.com>
parents:
443
diff
changeset
|
67 return (Number)obj; |
460 | 68 if( el != null ) { |
69 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
|
70 } else { |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
71 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
|
72 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
73 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
74 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
75 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
|
76 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
|
77 return (LuanFunction)obj; |
460 | 78 if( el != null ) { |
79 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
|
80 } else { |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
81 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
|
82 } |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
83 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
84 |
151
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
85 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
|
86 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
|
87 return (Boolean)obj; |
460 | 88 if( el != null ) { |
89 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
|
90 } else { |
2456ef7ada02
minor
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
171
diff
changeset
|
91 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
|
92 } |
151
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
93 } |
c9100f29fae0
conditions must be type boolean
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
132
diff
changeset
|
94 |
404
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
95 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
|
96 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
|
97 if( f == null ) |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
98 return null; |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
99 return checkFunction(f); |
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 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
102 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
|
103 if( o1 instanceof LuanTable ) { |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
104 LuanFunction f1 = getHandlerFunction(op,(LuanTable)o1); |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
105 if( f1 != null ) |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
106 return f1; |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
107 } |
d55e873e1f0d
metatables now only apply to tables
Franklin Schmidt <fschmidt@gmail.com>
parents:
191
diff
changeset
|
108 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
|
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 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
|
112 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
|
113 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
|
114 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
|
115 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
|
116 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
117 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
|
118 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
|
119 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
|
120 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
|
121 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
122 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
|
123 if( fn != null ) |
443
bf5e62a9090c
remove toBoolean() and to_boolean()
Franklin Schmidt <fschmidt@gmail.com>
parents:
440
diff
changeset
|
124 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
|
125 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
|
126 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
127 |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
128 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
|
129 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
|
130 if( fn != null ) |
112
f5af13062b10
fix previous rev
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
111
diff
changeset
|
131 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
|
132 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
|
133 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
|
134 } |
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
135 |
572
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
136 public String toString(Object obj) throws LuanException { |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
137 if( obj instanceof LuanTable ) { |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
138 LuanTable tbl = (LuanTable)obj; |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
139 return tbl.toString(this); |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
140 } |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
141 if( obj == null ) |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
142 return "nil"; |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
143 if( obj instanceof Number ) |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
144 return Luan.toString((Number)obj); |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
145 if( obj instanceof byte[] ) |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
146 return "binary: " + Integer.toHexString(obj.hashCode()); |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
147 return obj.toString(); |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
148 } |
f1601a4ce1aa
fix stack when calling meta-methods
Franklin Schmidt <fschmidt@gmail.com>
parents:
509
diff
changeset
|
149 |
88
6ca02b188dba
add LuanBit to clean up code;
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents:
diff
changeset
|
150 } |