refal-5-lambda
refal-5-lambda copied to clipboard
Предупреждения об избыточных функциях и внешних объявлениях
Нужно выводить следующие предупреждения:
-
[ ] Функция не используется. Это значит, что функция не является точкой входа и прямо или косвенно не доступна из точек входа. Тот факт, что функция вызывается из другой функции, ничего не говорит — в файле может быть несколько взаимно-рекурсивных локальных функций, которые никогда не вызываются.
Если в файле используется хотя бы одна метафункция, значит считаем, что все локальные функции используются.
-
[ ] Extern-объявление не используется. Аналогично предыдущему, но метафункции предупреждение не подавляют. Метафункции способны вызывать внешние функции по имени, даже если их нет в области видимости.
-
[ ] Для определённой функции есть extern-объявление. Оно избыточное, на него нужно указать.
-
[ ] Несколько extern-объявлений для одной функции.
Данную задачу невозможно адекватно решить, пока в языке есть $INCLUDE
и нативные вставки. Поэтому решать её нужно, когда эти устаревшие элементы (#318) будут удалены из компилятора.
Неиспользуемые функции могут располагаться и в прелюдии — на них предупреждение выдаваться не должно. Возможная реализация: при сканировании прелюдии координаты токенов помечать особым образом, для помеченных координат предупреждения не выдавать.