Beispiel #1
0
        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");
        }
Beispiel #2
0
        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");
        }
Beispiel #3
0
        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");
        }
Beispiel #4
0
        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");
        }
Beispiel #5
0
 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);
     }
 }