• Где моя ошибка в C# коде?

    @MicrofCorp Автор вопроса
    На Stack Overflow нормально ответили и не выпендривались, как тут. Проблема была в переменных game и main. Вот решение:

    Код
    /// <summary>
            /// Препретатор и постпретатор функция
            /// </summary>
            /// <param name="game">Массив строк всего скрипта</param>
            /// <param name="main">Сам скрипт</param>
            public static void Compilation(string[] game, ref string main, string namefunc = null)
            {
                //funct.Clear();
                for (int i = 0; i < game.Length; i++)
                {
                    game = main.Split('\n');
                    if (game[i].Split(';')[0] == "function")
                    {
                        
                        //создание или "взятие" функции
                        Function fn;
                        if(namefunc != null)
                        {
                            fn = funct[namefunc]; //получем функцию из списка по её имени
                        }
                        else if (!funct.ContainsKey(game[i].Split(';')[1]))
                        {
                            fn = new Function();
                            fn.start = i + 1;
                            string name = game[i].Split(';')[1];
                            fn.name = name;
                            funct.Add(name, fn);
                        }
                        else
                        {
                            fn = funct[game[i].Split(';')[1]];
                        }
    
                        //Подсчёт строк функции
                        int o = 1;
                        for (; !game[i + o].TrimEnd('\n', '\r', '\t').EndsWith("}"); o++) ;
    
                        var rrrhhh = ""; //временная переменная с итоговым кодом скрипта
                        var telo = "";//тело функции
                        for (int p = 0; p < ((i + o)); p++)
                        {
                            rrrhhh += game[p] + "\n";  //заполнение до конца функции                      
                        }
    
                        //Console.WriteLine(rrrhhh);
    
                        for (int q = i; q < i+o; q++)
                        {
                            telo += game[q] + "\n"; //заполнение тела
                        }
                        telo = telo.Split('\n')[telo.Split('\n').Length - 2];//обрезка } (там 2 должно быть, потому что индекс с 0, а количество с 1)
    
                        //Console.WriteLine(telo);
                        int lenghtgoto = 0;
                        if (!telo.Contains("goto;")){
                            rrrhhh = rrrhhh.Insert(rrrhhh.Length, String.Format("goto;{0}", fn.point) + "\n}");//если "гото" нет, то добавляем                        
                            lenghtgoto = (String.Format("goto;{0}", fn.point) + "\n}").Length; //вычисляем длинну вставки
                        }
                        else//иначе изменяем
                        {
                            rrrhhh = rrrhhh.Substring(0, rrrhhh.Length - 3);//обрезаем перенос строки и }
                            int y = rrrhhh.Length - 1;//получаем длинну в виде индекса
                            int t = 0;//создает временную переменную
                            for (; rrrhhh[y] == ';'; y--, t++) ;//считаем от конца и до ; (это символ передачи аргументов)
                            //t++;
                            rrrhhh = rrrhhh.Substring(0, rrrhhh.Length - t);//обрезаем по него
                            rrrhhh += ";" + fn.point.ToString() + "\n}";//добавляем новый "гото"
                            //Console.WriteLine(rrrhhh);
                        }
                        rrrhhh = rrrhhh.Insert(rrrhhh.Length, main.Substring(rrrhhh.Length - (lenghtgoto))); //Добавляем всё что после функции
                        //Console.WriteLine(rrrhhh);
                        main = rrrhhh; //изменяем основной скрипт                                    
                    }
    
                }
            }

    Ответ написан
    Комментировать