я бы начал смотреть комментарии снизу вверх - от самой нижней функции и выше.
вот так просто поменять тип? главное, чтобы он был правильный, то что ниже делается через new - не правильно. Нужно либо через copyPtr или просто сохранять тот тип, что там выдается.
зачем создавать новый тип? его нельзя разве использовать? это тут явно лишнее
выход из этого цикла можно сделать как только встретился исполняемый оператор? еще если не сделать выход
тут происходит что то странное, надо бы это по нормальному сделать. А почему берется второй символ (letter[1]), а не первый? Как размер строки, которая выдается через sunparse, можно покрыть все случаи?
что здесь имеется в виду? kind можно получить и без анпарсинга, так как помимо этого ключевого слова, есть или и другой способ задания. Подробности можно посмотреть в LoopAnalyzer/loop_analyzer.cpp:2567 в функции getSizeOfType.
аналогично, зачем создавать новый тип? вообще наверно можно было бы его скопировать, так как это явно правильнее, чем создавать по варианту, так как тут не учтен еще kind/len.
родитель оператора для вставки есть сама функция, поэтому в данном случае получать ср нет смысла, так как это равно function. Логично бы было использовать insertAfter для вставки нового оператора первым. Вопрос - всегда ли implicit должен быть первым ?
не лучший вариант прохода по всем операторам функции, так как скорее всего функция взятия конкретного оператора будет проходит по всем оператора функции с начала и до этого номера, что не эффективно. Лучше это делать так, как показано в инструкции - начиная с первого и перемещаясь через lexNext.
в проход передавать проект в целом не разрешается, поэтому нужно перевести этот проход на проход по файлам, так как ему не зачем что то выполнять над проектом.