refal-5-lambda icon indicating copy to clipboard operation
refal-5-lambda copied to clipboard

Предупреждения об избыточных функциях и внешних объявлениях

Open Mazdaywik opened this issue 4 years ago • 0 comments

Нужно выводить следующие предупреждения:

  • [ ] Функция не используется. Это значит, что функция не является точкой входа и прямо или косвенно не доступна из точек входа. Тот факт, что функция вызывается из другой функции, ничего не говорит — в файле может быть несколько взаимно-рекурсивных локальных функций, которые никогда не вызываются.

    Если в файле используется хотя бы одна метафункция, значит считаем, что все локальные функции используются.

  • [ ] Extern-объявление не используется. Аналогично предыдущему, но метафункции предупреждение не подавляют. Метафункции способны вызывать внешние функции по имени, даже если их нет в области видимости.

  • [ ] Для определённой функции есть extern-объявление. Оно избыточное, на него нужно указать.

  • [ ] Несколько extern-объявлений для одной функции.

Данную задачу невозможно адекватно решить, пока в языке есть $INCLUDE и нативные вставки. Поэтому решать её нужно, когда эти устаревшие элементы (#318) будут удалены из компилятора.

Неиспользуемые функции могут располагаться и в прелюдии — на них предупреждение выдаваться не должно. Возможная реализация: при сканировании прелюдии координаты токенов помечать особым образом, для помеченных координат предупреждения не выдавать.

Mazdaywik avatar Oct 23 '20 20:10 Mazdaywik