Exemple #1
0
        public Value ArrayRemoveAt(FunctionCallArgs parameters)
        {
            int valueIndex = (int)parameters.Values[1].NumericValue;

            parameters.Values[0].Array.RemoveAt(valueIndex);
            return(null);
        }
Exemple #2
0
 public Value TimespanTotalMilliseconds(FunctionCallArgs parameters)
 {
     return(new Value()
     {
         Type = Value.DataType.Numeric,
         NumericValue = (decimal)parameters.Values[0].TimeSpanValue.TotalMilliseconds
     });
 }
Exemple #3
0
        public Value Read(FunctionCallArgs parameters)
        {
            string line = Console.ReadLine();

            return(new Value()
            {
                StringValue = line
            });
        }
Exemple #4
0
        public Value ArrayLength(FunctionCallArgs parameters)
        {
            Value value = new Value()
            {
                Type         = Value.DataType.Numeric,
                NumericValue = parameters.Values[0].Array.Count
            };

            return(value);
        }
Exemple #5
0
        public Value ArrayNew(FunctionCallArgs parameters)
        {
            Value result = new Value()
            {
                Type  = Value.DataType.Array,
                Array = parameters.Values
            };

            return(result);
        }
Exemple #6
0
        public Value RandomFunction(FunctionCallArgs parameters)
        {
            Random rnd  = new Random(DateTime.Now.Millisecond);
            string line = Console.ReadLine();

            return(new Value()
            {
                NumericValue = rnd.Next()
            });
        }
Exemple #7
0
        public Value GetDirectories(FunctionCallArgs parameters)
        {
            Value result = new Value()
            {
                Type  = Value.DataType.Array,
                Array = new List <Value>()
            };

            return(result);
        }
Exemple #8
0
        public Value MapNew(FunctionCallArgs parameters)
        {
            Value result = new Value()
            {
                Type = Value.DataType.Map,
                Map  = new Dictionary <string, Value>()
            };

            return(result);
        }
Exemple #9
0
        public Value StructureNew(FunctionCallArgs parameters)
        {
            Value result = new Value()
            {
                Type      = Value.DataType.Structure,
                Structure = new Dictionary <string, Value>()
            };

            return(result);
        }
Exemple #10
0
        InstructionResult ExecuteInstructionFunction(Instruction instruction)
        {
            InstructionResult result = new InstructionResult();

            InstructionFunction instructionFunction = instruction as InstructionFunction;

            List <Value> values = new List <Value>();

            foreach (var parameter in instructionFunction.Parameters)
            {
                Value value = CopyValue(ExecuteInstruction(parameter).Value);
                values.Add(value);
            }

            if (_embededFunctions.ContainsKey(instructionFunction.FunctionName))
            {
                FunctionCallArgs functionCallArgs = new FunctionCallArgs()
                {
                    Interpreter = this,
                    Name        = instructionFunction.FunctionName,
                    Values      = values
                };

                result.Value = _embededFunctions[instructionFunction.FunctionName](functionCallArgs);
            }
            else
            {
                Function previousFunction = _currentFunction;
                _currentFunction = _program.Functions.FirstOrDefault(f => f.Name == instructionFunction.FunctionName);
                ThrowExceptionOnCondition(_currentFunction == null, instruction, 30002, new string[] { instructionFunction.FunctionName });

                _stack.AddRange(values);
                int numberOfValueToAdd = _currentFunction.Variables.Count - _currentFunction.ParametersCount;
                for (int i = 0; i < numberOfValueToAdd; i++)
                {
                    _stack.Add(new Value());
                }

                result = ExecuteBloc(_currentFunction.Instructions.ToArray());

                _stack.RemoveRange(_stack.Count - _currentFunction.Variables.Count, _currentFunction.Variables.Count);
                _currentFunction = previousFunction;
            }

            result.Value  = ResolvePath(result.Value, instructionFunction.Path);
            result.Return = false;

            return(result);
        }
Exemple #11
0
        public Value Date(FunctionCallArgs parameters)
        {
            DateTime dateTime = new DateTime();

            if (parameters.Values.Count == 0)
            {
                dateTime = DateTime.Now;
            }
            else if (parameters.Values.Count == 3)
            {
                int year  = (int)parameters.Values[0].NumericValue;
                int month = (int)parameters.Values[1].NumericValue;
                int day   = (int)parameters.Values[2].NumericValue;

                dateTime = new DateTime(year, month, day);
            }
            else if (parameters.Values.Count == 6)
            {
                int year  = (int)parameters.Values[0].NumericValue;
                int month = (int)parameters.Values[1].NumericValue;
                int day   = (int)parameters.Values[2].NumericValue;

                int hour   = (int)parameters.Values[3].NumericValue;
                int minute = (int)parameters.Values[4].NumericValue;
                int second = (int)parameters.Values[5].NumericValue;

                dateTime = new DateTime(year, month, day, hour, minute, second);
            }
            else if (parameters.Values.Count == 7)
            {
                int year  = (int)parameters.Values[0].NumericValue;
                int month = (int)parameters.Values[1].NumericValue;
                int day   = (int)parameters.Values[2].NumericValue;

                int hour   = (int)parameters.Values[3].NumericValue;
                int minute = (int)parameters.Values[4].NumericValue;
                int second = (int)parameters.Values[5].NumericValue;

                int millisecond = (int)parameters.Values[6].NumericValue;

                dateTime = new DateTime(year, month, day, hour, minute, second, millisecond);
            }

            return(new Value()
            {
                Type = Value.DataType.DateTime,
                DateTimeValue = dateTime
            });
        }
Exemple #12
0
        public Value GetFiles(FunctionCallArgs parameters)
        {
            Value result = new Value()
            {
                Type  = Value.DataType.Array,
                Array = new List <Value>()
            };

            System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(parameters.Values[0].StringValue);
            foreach (var file in dir.GetFiles())
            {
                Value value = CreateFileInfo(file);
                result.Array.Add(value);
            }

            return(result);
        }
Exemple #13
0
        public Value Print(FunctionCallArgs parameters)
        {
            switch (parameters.Values[0].Type)
            {
            case Value.DataType.String:
                Console.WriteLine(parameters.Values[0].StringValue);
                break;

            case Value.DataType.Numeric:
                Console.WriteLine(parameters.Values[0].NumericValue);
                break;

            case Value.DataType.Boolean:
                Console.WriteLine(parameters.Values[0].BoolValue);
                break;
            }

            return(new Value());
        }
Exemple #14
0
 public Value ArrayPush(FunctionCallArgs parameters)
 {
     parameters.Values[0].Array.Add(parameters.Values[1]);
     return(null);
 }
Exemple #15
0
 public Value Sleep(FunctionCallArgs parameters)
 {
     System.Threading.Thread.Sleep(Math.Max((int)parameters.Values[0].NumericValue, 0));
     return(null);
 }
Exemple #16
0
 public Value ArrayClear(FunctionCallArgs parameters)
 {
     parameters.Values[0].Array.Clear();
     return(null);
 }