А есть ли нечто такое во Free Pascal?
Добавлено спустя 21 час 11 минут 4 секунды:
Я «залез под капот» и понял, что такой фичи в языке нет, но её относительно несложно добавить. Потребуется в scanner.pas добавить новую директиву, в tscannerfile.linebreak немного подправить алгоритм подсчёта номера строки, а имя указанного файла зарегистрировать в tinputfilemanager.register_file. Что делать с номером символа не совсем понятно, наверно, оставить как есть…
Дизайн директив видится таким:
- Код: Выделить всё
{$FIXLINEINFO line_no "filename"} // фиксируем информацию, отключаем автоинкрементацию номера строки
{$CORRECTLINEINFO line_no "filename"} // меняем информацию, автоинкрементация не отключается
// filename в обоих дериктивах можно не указывать, будет автоматом подставлен текущий файл
{$CORRECTLINEINFO} // включает автоинкрементацию начиная со следующей строки
Таким образом, если одна строка псевдоязыка развернётся в несколько строк на паскале, то можно будет «схлопнуть» номера этих строк:
- Код: Выделить всё
{$FIXLINEINFO 398 "foo.vasyapupkinlang"}
if A is TCircle then TCircle(A).Render else
if A is TRectangle then TRectangle(A).Render else
if A is TTeapot then TTeapot(A).Render else
{$CORRECTLINEINFO}
Writenl('ERROR: UNKNOWN CLASS A');
Ошибки как-то так:
- Код: Выделить всё
foo.vasyapupkinlang(398,4) Error: Identifier not found "A"
foo.vasyapupkinlang(398,30) Error: Identifier not found "A"
foo.vasyapupkinlang(398,4) Error: Identifier not found "A"
foo.vasyapupkinlang(398,40) Error: Identifier not found "A"
foo.vasyapupkinlang(398,4) Error: Identifier not found "A"
foo.vasyapupkinlang(398,30) Error: Identifier not found "A"
foo.vasyapupkinlang(399,1) Error: Identifier not found "Writenl"
Кто-нибудь может мне подсказать, когда я это доделаю, то куда обращаться на тему добавления фичи в fpc?