Beispiel #1
0
        LuaArguments ipairs(LuaArguments args)
        {
            LuaObject handler = LuaEvents.getMetamethod(args[0], "__ipairs");

            if (!handler.IsNil)
            {
                return(handler.Call(args));
            }
            else
            {
                if (args[0].IsTable)
                {
                    LuaFunction f = delegate(LuaArguments x)
                    {
                        var s   = x[0];
                        var var = x[1].AsNumber() + 1;

                        var val = s[var];
                        if (val == LuaObject.Nil)
                        {
                            return(Return(LuaObject.Nil));
                        }
                        else
                        {
                            return(Return(var, val));
                        }
                    };
                    return(Return(f, args[0], 0));
                }
                else
                {
                    throw new LuaException("t must be a table");
                }
            }
        }
Beispiel #2
0
        static LuaArguments EvalNumericFor(NumericFor stat, LuaContext Context, out LuaReturnStatus returned)
        {
            returned.broke    = false;
            returned.returned = false;
            var varList   = EvalExpression(stat.Var, Context);
            var limitList = EvalExpression(stat.Limit, Context);
            var stepList  = EvalExpression(stat.Step, Context);
            var var       = LuaEvents.toNumber(varList[0]);
            var limit     = LuaEvents.toNumber(limitList[0]);
            var step      = LuaEvents.toNumber(stepList[0]);

            if (!(var & limit & step).AsBool())
            {
                throw new LuaException("Error in for loop");
            }
            LuaContext ctx = new LuaContext(Context);

            while ((step > 0 & var <= limit) | (step <= 0 & var >= limit))
            {
                ctx.SetLocal(stat.Variable, var);
                LuaArguments obj = EvalBlock(stat.Block, ctx, out returned);
                if (returned.broke)
                {
                    break;
                }
                if (returned.returned)
                {
                    return(obj);
                }
                var = var + step;
            }
            return(Lua.Return());
        }
Beispiel #3
0
        static LuaObject EvalBinaryExpression(BinaryExpression Expression, LuaContext Context)
        {
            LuaObject left = EvalExpression(Expression.Left, Context)[0], right = EvalExpression(Expression.Right, Context)[0];

            switch (Expression.Operation)
            {
            case BinaryOp.Addition:
                return(left + right);

            case BinaryOp.And:
                return(left & right);

            case BinaryOp.Concat:
                return(LuaEvents.concat_event(left, right));

            case BinaryOp.Different:
                return(!(LuaEvents.eq_event(left, right)));

            case BinaryOp.Division:
                return(left / right);

            case BinaryOp.Equal:
                return(LuaEvents.eq_event(left, right));

            case BinaryOp.GreaterOrEqual:
                return(left >= right);

            case BinaryOp.GreaterThan:
                return(left > right);

            case BinaryOp.LessOrEqual:
                return(left <= right);

            case BinaryOp.LessThan:
                return(left < right);

            case BinaryOp.Modulo:
                return(left % right);

            case BinaryOp.Multiplication:
                return(left * right);

            case BinaryOp.Or:
                return(left | right);

            case BinaryOp.Power:
                return(left ^ right);

            case BinaryOp.Subtraction:
                return(left - right);

            default:
                throw new NotImplementedException();
            }
        }
Beispiel #4
0
        LuaArguments pairs(LuaArguments args)
        {
            LuaObject handler = LuaEvents.getMetamethod(args[0], "__pairs");

            if (!handler.IsNil)
            {
                return(handler.Call(args));
            }
            else
            {
                return(Return((LuaFunction)next, args[0], LuaObject.Nil));
            }
        }
Beispiel #5
0
 public LuaObject this[LuaObject key]
 {
     get
     {
         if (IsTable)
         {
             var       table = AsTable();
             LuaObject obj;
             if (table.TryGetValue(key, out obj))
             {
                 return(obj);
             }
             else
             {
                 return(LuaEvents.index_event(this, key));
             }
         }
         else
         {
             return(LuaEvents.index_event(this, key));
         }
     }
     set
     {
         if (IsTable)
         {
             var       table = AsTable();
             LuaObject obj;
             if (table.TryGetValue(key, out obj))
             {
                 table[key] = value;
             }
             else
             {
                 LuaEvents.newindex_event(this, key, value);
             }
         }
         else
         {
             LuaEvents.newindex_event(this, key, value);
         }
     }
 }
Beispiel #6
0
 public LuaObject this[LuaObject key]
 {
     get
     {
         if (IsTable)
         {
             LuaTable table = AsTable();
             if (table.ContainsKey(key))
             {
                 return(table[key]);
             }
             else
             {
                 return(LuaEvents.index_event(this, key));
             }
         }
         else
         {
             return(LuaEvents.index_event(this, key));
         }
     }
     set
     {
         if (IsTable)
         {
             var table = AsTable();
             if (table.ContainsKey(key))
             {
                 table[key] = value;
             }
             else
             {
                 LuaEvents.newindex_event(this, key, value);
             }
         }
         else
         {
             LuaEvents.newindex_event(this, key, value);
         }
     }
 }
Beispiel #7
0
 public static LuaObject operator /(LuaObject a, LuaObject b)
 {
     return(LuaEvents.div_event(a, b));
 }
Beispiel #8
0
 public static LuaObject operator -(LuaObject a, LuaObject b)
 {
     return(LuaEvents.sub_event(a, b));
 }
Beispiel #9
0
 LuaArguments tostring(LuaArguments args)
 {
     return(Return(LuaEvents.tostring_event(args[0])));
 }
Beispiel #10
0
 public static LuaObject operator %(LuaObject a, LuaObject b)
 {
     return(LuaEvents.mod_event(a, b));
 }
Beispiel #11
0
 LuaArguments rawget(LuaArguments args)
 {
     return(Return(LuaEvents.rawget(args[0], args[1])));
 }
Beispiel #12
0
 LuaArguments rawset(LuaArguments args)
 {
     LuaEvents.rawset(args[0], args[1], args[2]);
     return(Return(args[0]));
 }
Beispiel #13
0
 /// <summary>
 /// Calls the object. If this is not a function, it calls the metatable field __call
 /// </summary>
 /// <param name="args">The arguments to pass</param>
 public LuaArguments Call(LuaArguments args)
 {
     return(LuaEvents.call_event(this, args));
 }
Beispiel #14
0
 public static LuaObject operator -(LuaObject a)
 {
     return(LuaEvents.unm_event(a));
 }
Beispiel #15
0
 public static LuaObject operator >=(LuaObject a, LuaObject b)
 {
     return(LuaEvents.le_event(b, a));
 }
Beispiel #16
0
 public static LuaObject operator <=(LuaObject a, LuaObject b)
 {
     return(LuaEvents.le_event(a, b));
 }
Beispiel #17
0
 public static LuaObject operator ^(LuaObject a, LuaObject b)
 {
     return(LuaEvents.pow_event(a, b));
 }