Ну, именно как вы написали - делать точно нельзя, если делать это на уровне компилятора - то надо сначала реализовать что то типа decltype из C++.
Но вообще этого же можно добится дополнительной функцией:
function file_for<T>(o: T): file of T;
begin end;
type
c1 = class
val: record x: integer end;
f := file_for(val);
end;
begin end.
Можно добавить не частные, с вашей точки зрения, подпрограммы из файла в NumLibABC. Некоторые подпрограммы изменены, некоторые — созданы. Векторы.pas (14.4 КБ)
Когда через IDE запущена Win форма, и в ней требуется перезапуск(Application.Restart;), то среда теряет контроль над программой, а вместо формы запускается консоль. Перезапуск хоть используется и не часто, но всё-таки не очень приятно. Если это технически можно исправить, то было бы неплохо
Новые фичи for step и foreach index пока не дружат с Intellisense.
Кстати, вы сделали подсветку этих ключевых слов зависящую от контекста (причём берущую подсветку от for). Я это заметил потому что в свою подсветку эти слова не добавлял, но они при этом работают. Это круто! Стоит ли ждать контекстуальную подсветку других ключевых слов (Result, value, read-write в свойствах)?
Так Вы терминологию не путайте. Подсветка - это способ выделения фрагмента из чего-то более крупного. Для шрифта это могут быть быть цвет, гарнитура, подчеркивание, кегль и т.д. А то, что Вы показали на рисунке - это мини-справка Intellisence.
Возможно кто-то ещё замечал: когда в ide код прокручиваешь жестами тачпада, то поле редактора двигается уж очень неохотно. хорошо срабатывает только когда делаешь быстрый жест. но так невозможно промотать конкретное кол-во строк
if t.IsPrimitive then
case System.Type.GetTypeCode(t) of
Не хорошо оставлять case без else. Только что обнаружил что вместо UIntPtr выписывает пустую строку.
Вообще t.IsPrimitive никак не гарантирует что Type.GetTypeCode не выдаст ничего кроме обработаных вами значений.
Лучше убрать if t.IsPrimitive then и поставить всё остальное тело TypeToTypeName в else от case'а.
case не медленнее, потому что он превращается в таблицу прыжков в IL коде.
То есть выполнение заголовка case это 1 разименование указателя.
А IsPrimitive это вызов виртуальной функции, поэтому её выполнение это Минимум 1 разименование указателя.
Нигде в документации не написано, что если t.IsPrimitive=true, то Type.GetTypeCode вернёт одно из значений, которые вы обработали в case.
Я уже привёл - это UIntPtr.
И, ещё раз, первоочерёдная проблема это то что case без else это говнокод, имеющий потенциал создать неопределённое поведение, если писать его не изучив все варианты (включая будущие, к примеру то что могут добавить в обновлениях .Net) - а вы их таки не изучили.