Simplify bindings.

This commit is contained in:
James Roseborough
2010-04-26 15:59:42 +00:00
parent 7a8562db01
commit 3f727fbe17

View File

@@ -23,6 +23,8 @@ package org.luaj.vm2.lib.jse;
import org.luaj.vm2.LuaValue; import org.luaj.vm2.LuaValue;
import org.luaj.vm2.lib.MathLib; import org.luaj.vm2.lib.MathLib;
import org.luaj.vm2.lib.OneArgFunction;
import org.luaj.vm2.lib.TwoArgFunction;
/** /**
* Math library implementation for use on JSE platform. * Math library implementation for use on JSE platform.
@@ -35,39 +37,41 @@ public class JseMathLib extends org.luaj.vm2.lib.MathLib {
public JseMathLib() {} public JseMathLib() {}
public LuaValue call(LuaValue arg) { public LuaValue call(LuaValue arg) {
MathLib ml = new MathLib(); LuaValue t = super.call(arg);
ml.setfenv(env); bind( t, JseMathLib1.class, new String[] {
LuaValue t = ml.call(arg);
bind1( t, new String[] {
"acos", "asin", "atan", "cosh", "acos", "asin", "atan", "cosh",
"exp", "log", "log10", "sinh", "exp", "log", "log10", "sinh",
"tanh" } ); "tanh" } );
bind2( t, new String[] { bind( t, JseMathLib2.class, new String[] {
"atan2", "pow", } ); "atan2", "pow", } );
return t; return t;
} }
public LuaValue oncall1(int opcode, LuaValue arg) { public static final class JseMathLib1 extends OneArgFunction {
switch ( opcode ) { public LuaValue call(LuaValue arg) {
case 0: return valueOf(Math.acos(arg.todouble())); switch ( opcode ) {
case 1: return valueOf(Math.asin(arg.todouble())); case 0: return valueOf(Math.acos(arg.todouble()));
case 2: return valueOf(Math.atan(arg.todouble())); case 1: return valueOf(Math.asin(arg.todouble()));
case 3: return valueOf(Math.cosh(arg.todouble())); case 2: return valueOf(Math.atan(arg.todouble()));
case 4: return valueOf(Math.exp(arg.todouble())); case 3: return valueOf(Math.cosh(arg.todouble()));
case 5: return valueOf(Math.log(arg.todouble())); case 4: return valueOf(Math.exp(arg.todouble()));
case 6: return valueOf(Math.log10(arg.todouble())); case 5: return valueOf(Math.log(arg.todouble()));
case 7: return valueOf(Math.sinh(arg.todouble())); case 6: return valueOf(Math.log10(arg.todouble()));
case 8: return valueOf(Math.tanh(arg.todouble())); case 7: return valueOf(Math.sinh(arg.todouble()));
case 8: return valueOf(Math.tanh(arg.todouble()));
}
return NIL;
} }
return NIL;
} }
public LuaValue oncall2(int opcode, LuaValue arg1, LuaValue arg2) { public static final class JseMathLib2 extends TwoArgFunction {
switch ( opcode ) { public LuaValue call(LuaValue arg1, LuaValue arg2) {
case 0: return valueOf(Math.atan2(arg1.todouble(), arg2.todouble())); switch ( opcode ) {
case 1: return valueOf(Math.pow(arg1.todouble(), arg2.todouble())); case 0: return valueOf(Math.atan2(arg1.todouble(), arg2.todouble()));
case 1: return valueOf(Math.pow(arg1.todouble(), arg2.todouble()));
}
return NIL;
} }
return NIL;
} }
/** Faster, better version of pow() used by arithmetic operator ^ */ /** Faster, better version of pow() used by arithmetic operator ^ */