Esempio n. 1
0
        static LuaObject EvalUnaryExpression(UnaryExpression Expression, LuaContext Context)
        {
            LuaObject obj = EvalExpression(Expression.Expression, Context)[0];

            switch (Expression.Operation)
            {
            case UnaryOp.Invert:
                return(-(obj.AsNumber()));

            case UnaryOp.Length:
            {
                if (obj.Is(LuaType.table))
                {
                    return(obj.AsTable().Count);
                }
                else
                {
                    return(obj.AsString().Length);
                }
            }

            case UnaryOp.Negate:
                return(!(obj.AsBool()));

            default:
                throw new NotImplementedException();
            }
        }
Esempio n. 2
0
        LuaArguments tonumber(LuaArguments args)
        {
            LuaObject obj = args[0];

            if (args.Length == 1)
            {
                double d = 0;
                if (obj.IsString)
                {
                    if (double.TryParse(obj.AsString(), out d))
                    {
                        return(Return(d));
                    }
                    else
                    {
                        return(Return());
                    }
                }
                else if (obj.IsNumber)
                {
                    return(Return(obj.AsNumber()));
                }
                else
                {
                    return(Return());
                }
            }
            else
            {
                //TODO: Implement tonumber for bases different from 10
                throw new NotImplementedException();
            }
        }
Esempio n. 3
0
        LuaArguments rawlen(LuaArguments args)
        {
            LuaObject obj = args[0];

            if (obj.IsString)
            {
                return(Return(obj.AsString().Length));
            }
            else if (obj.IsTable)
            {
                return(Return(obj.AsTable().Count));
            }
            else
            {
                throw new LuaException("invalid argument");
            }
        }
Esempio n. 4
0
 internal static LuaObject len_event(LuaObject op)
 {
     if (op.IsString)
     {
         return(op.AsString().Length);
     }
     else
     {
         var handler = getMetamethod(op, "__len");
         if (!handler.IsNil)
         {
             return(handler.Call(op)[0]);
         }
         else if (op.IsTable)
         {
             return(op.AsTable().Count);
         }
         else
         {
             throw new LuaException("Invalid op");
         }
     }
 }
Esempio n. 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);
     }
 }
Esempio n. 6
0
 internal static LuaObject le_event(LuaObject op1, LuaObject op2)
 {
     if (op1.IsNumber && op2.IsNumber)
     {
         return(op1.AsNumber() <= op2.AsNumber());
     }
     else if (op1.IsString && op2.IsString)
     {
         int n = StringComparer.CurrentCulture.Compare(op1.AsString(), op2.AsString());
         return(n <= 0);
     }
     else
     {
         var handler = getBinhandler(op1, op2, "__le");
         if (!handler.IsNil)
         {
             return(!(!(handler.Call(op1, op2)[0].AsBool())));
         }
         else
         {
             return(LuaObject.Nil);
         }
     }
 }
Esempio n. 7
0
 internal static LuaObject le_event(LuaObject op1, LuaObject op2)
 {
     if (op1.IsNumber && op2.IsNumber)
     {
         return(op1.AsNumber() <= op2.AsNumber());
     }
     else if (op1.IsString && op2.IsString)
     {
         int n = StringComparer.CurrentCulture.Compare(op1.AsString(), op2.AsString());
         return(n <= 0);
     }
     else
     {
         var handler = getBinhandler(op1, op2, "__le");
         if (!handler.IsNil)
         {
             return(!(!(handler.Call(op1, op2)[0].AsBool())));
         }
         else
         {
             throw new ArgumentException("attempt to compare " + op1.type.ToString() + " with " + op2.type.ToString());
         }
     }
 }
Esempio n. 8
0
 internal static bool ConvertToNumber(LuaObject obj, out double value)
 {
     if (obj.IsNumber)
     {
         value = (double)obj.luaobj;
         return(true);
     }
     else if (obj.IsString)
     {
         if (double.TryParse(obj.AsString(), out value))
         {
             return(true);
         }
         else
         {
             return(false);
         }
     }
     else
     {
         value = 0d;
         return(false);
     }
 }