internal static LuaObject unm_event(LuaObject op) { double a; if (ConvertToNumber(op, out a)) { return(LuaObject.FromNumber(-a)); } else { var handler = getMetamethod(op, "__unm"); if (!handler.IsNil) { return(handler.Call(op)[0]); } } throw new LuaException("Invalid arithmetic operation"); }
internal static LuaObject pow_event(LuaObject op1, LuaObject op2) { double a, b; if (ConvertToNumber(op1, out a) && ConvertToNumber(op2, out b)) { return(LuaObject.FromNumber(Math.Pow(a, b))); } else { var handler = getBinhandler(op1, op2, "__pow"); if (!handler.IsNil) { return(handler.Call(op1, op2)[0]); } } throw new LuaException("Invalid arithmetic operation"); }
internal static LuaObject unm_event(LuaObject op) { var a = toNumber(op); if (!a.IsNil) { double o1 = a.AsNumber(); return(LuaObject.FromNumber(-o1)); } else { var handler = getMetamethod(op, "__unm"); if (!handler.IsNil) { return(handler.Call(op)[0]); } } throw new LuaException("Invalid arithmetic operation"); }
internal static LuaObject pow_event(LuaObject op1, LuaObject op2) { var a = toNumber(op1); var b = toNumber(op2); if (!a.IsNil && !b.IsNil) { return(LuaObject.FromNumber(Math.Pow(a.AsNumber(), b.AsNumber()))); } else { var handler = getBinhandler(op1, op2, "__pow"); if (!handler.IsNil) { return(handler.Call(op1, op2)[0]); } } throw new LuaException("Invalid arithmetic operation"); }
internal static LuaObject toNumber(LuaObject obj) { if (obj.IsNumber) { return(LuaObject.FromNumber(obj.AsNumber())); } else if (obj.IsString) { double d; if (double.TryParse(obj.AsString(), out d)) { return(LuaObject.FromNumber(d)); } else { return(LuaObject.Nil); } } else { return(LuaObject.Nil); } }