Example #1
0
 static private string GetValueFromTable(string Variable, string VarPath, out MemorySlot Value)
 {
     foreach (var block in OpenedBlocks)
     {
         var vrb = block.variables.Find((variable) => variable.Name == Variable);
         if (vrb != null)
         {
             var    DestinationTable = vrb.Data.Data;
             string NormalPath;
             var    res = GetNormalizedPath(VarPath, out NormalPath);
             if (res != null)
             {
                 Value = new MemorySlot();
                 return(res);
             }
             var PathList = NormalPath.Split(Separator, StringSplitOptions.RemoveEmptyEntries);
             for (var i = 0; i < PathList.Length - 1; i++)
             {
                 MemorySlot tmp_slot;
                 try
                 {
                     tmp_slot = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[i]);
                 }
                 catch
                 {
                     Value = new MemorySlot();
                     return("BAD_TYPE");
                 }
                 if (tmp_slot.DataType != "Table")
                 {
                     Value = new MemorySlot();
                     return("BAD_TYPE");
                 }
                 DestinationTable = tmp_slot.Data;
             }
             Value = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[PathList.Length - 1]);
             return(null);
         }
     }
     Value = new MemorySlot();
     return("BADNAME_VARIABLE");
 }
Example #2
0
        static private string UpdateVariableInTable(ref int NextIndex, ref int line_ptr, string Command, Variable variable, string VarPath, bool IsFunc = false)
        {
            var    DestinationTable = variable.Data.Data;
            string NormalPath;
            var    res = GetNormalizedPath(VarPath, out NormalPath);

            if (res != null)
            {
                return(res);
            }
            var PathList = NormalPath.Split(Separator, StringSplitOptions.RemoveEmptyEntries);

            for (var i = 0; i < PathList.Length - 1; i++)
            {
                MemorySlot tmp_slot;
                try
                {
                    tmp_slot = Tables[Convert.ToInt32(DestinationTable)].GetValue(PathList[i]);
                }
                catch
                {
                    return("BAD_TYPE");
                }
                if (tmp_slot.DataType != "Table")
                {
                    return("BAD_TYPE");
                }
                DestinationTable = tmp_slot.Data;
            }
            MemorySlot variable_data = new MemorySlot();

            if (GetNextSymbol(Command, ref NextIndex, ref line_ptr) == '=')
            {
                if (CheckNextSymbol(Command, NextIndex, '{'))
                {
                    variable_data = new MemorySlot("Table");
                    res           = InitTable(ref NextIndex, ref line_ptr, Command, Convert.ToInt32(variable_data.Data));
                    if (res != null)
                    {
                        return(res);
                    }
                }
                else
                {
                    string expression;
                    var    result = GetNextExpression(Command, ref NextIndex, ref line_ptr, out expression, IsFunc);
                    if (!result)
                    {
                        return("BAD_EXPRESSION");
                    }
                    res = InterpretExpression(expression, out variable_data);
                    if (res != null)
                    {
                        return(res);
                    }
                }
                Tables[Convert.ToInt32(DestinationTable)].AddUpdateValue(PathList[PathList.Length - 1], variable_data);
                return(null);
            }
            else
            {
                return("BAD_EXPRESSION");
            }
        }