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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
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
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 130
diff changeset
27 }
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 130
diff changeset
28
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 130
diff changeset
29 public void dumpStack() {
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 130
diff changeset
30 System.err.println( stackTrace() );
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 130
diff changeset
31 }
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
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
58 if( el != null ) {
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
59 throw exception( "attempt to use '"+el.text()+"' (a " + Luan.type(obj) + " value) as a string" );
191
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
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
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
68 if( el != null ) {
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
69 throw exception( "attempt to perform arithmetic on '"+el.text()+"' (a " + Luan.type(obj) + " value)" );
191
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
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
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
78 if( el != null ) {
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
79 throw exception( "attempt to call '"+el.text()+"' (a " + Luan.type(obj) + " value)" );
191
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 171
diff changeset
80 } else {
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" );
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
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
88 if( el != null ) {
b48cfa14ba60 improve stack trace
Franklin Schmidt <fschmidt@gmail.com>
parents: 459
diff changeset
89 throw exception( "attempt to use '"+el.text()+"' (a " + Luan.type(obj) + " value) as a boolean" );
191
fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
parents: 171
diff changeset
90 } else {
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" );
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 }