comparison core/src/luan/impl/LuanStateImpl.java @ 647:8e8c30b72e9b

move methods from LuanState to Luan
author Franklin Schmidt <fschmidt@gmail.com>
date Tue, 29 Mar 2016 20:39:14 -0600
parents cdc70de628b5
children 140cc5191b7a
comparison
equal deleted inserted replaced
646:cdc70de628b5 647:8e8c30b72e9b
115 @Override public void setJava() { 115 @Override public void setJava() {
116 ((LuanTable)frame.closure.upValues()[0].get()).hasJava = true; 116 ((LuanTable)frame.closure.upValues()[0].get()).hasJava = true;
117 } 117 }
118 118
119 119
120
121 @Override public boolean isLessThan(Object o1,Object o2) throws LuanException {
122 if( o1 instanceof Number && o2 instanceof Number ) {
123 Number n1 = (Number)o1;
124 Number n2 = (Number)o2;
125 return n1.doubleValue() < n2.doubleValue();
126 }
127 if( o1 instanceof String && o2 instanceof String ) {
128 String s1 = (String)o1;
129 String s2 = (String)o2;
130 return s1.compareTo(s2) < 0;
131 }
132 LuanFunction fn = getBinHandler("__lt",o1,o2);
133 if( fn != null )
134 return checkBoolean( Luan.first(fn.call(this,new Object[]{o1,o2})) );
135 throw new LuanException( "attempt to compare " + Luan.type(o1) + " with " + Luan.type(o2) );
136 }
137
138 LuanFunction getBinHandler(String op,Object o1,Object o2) throws LuanException {
139 if( o1 instanceof LuanTable ) {
140 LuanFunction f1 = getHandlerFunction(op,(LuanTable)o1);
141 if( f1 != null )
142 return f1;
143 }
144 return o2 instanceof LuanTable ? getHandlerFunction(op,(LuanTable)o2) : null;
145 }
146
147 LuanFunction getHandlerFunction(String op,LuanTable t) throws LuanException {
148 Object f = t.getHandler(op);
149 if( f == null )
150 return null;
151 return checkFunction(f);
152 }
153
154 } 120 }