Вверх ↑
Ответов: 9906
Рейтинг: 351
#1: 2020-01-03 22:35:46 ЛС | профиль | цитата
Netspirit писал(а):
А вот тут мне не очень понятно чем "односимвольная строка" отличается от остальных

Слушай, я сам попытался воспроизвести этот баг - и НЕ СМОГ
Но я же не сумасшедший, чтобы прилепить эту облицовку из PChar с концевым ноликом... Потому что моей левой ноге так захотелось
CodeGen.pas

function StringToCode(const s:string):string;
................
Result := 'PChar(';
..............
Result := Result + '#0)';
end;
Чего точно помню: на такую сгенерированную строку _prop_Mask := '*'; - компилятор сильно обижался, сообщая, что типы string и char он совместить не состоянии. Т.е., он понимал '*' как символ, а не как строку. Если символов константе было несколько - то он это понимал как строку, а если один - то как символ.
Блин, вот ведь как живое перед глазами стоит

Сейчас я этого воспроизвести не могу. Пробую в IC - работает. Комментирую две вышеуказанные строки в CodeGen - тоже работает (после этого, вроде, должны заработать нолики в коротких константных строках).
Че к чему
Такую ошибку внешними файлами не сделаешь - это внутренняя семантика, только код самого компилятора.
Правда шибко давно это было... Сразу после выделения CodeGen в отдельную dll (да-да, когда-то его не было)
Сейчас-то компилятор из Alternative build, не факт, что полностью совпадает с тем, что был с народа.
В общем -- ничего не понимаю

Netspirit писал(а):
чего можно насмотреться по кодам наших компонентов

Тут ты прав - еще как можно.

Netspirit писал(а):
не имею чего возразить

Тоды: все старое удаляю, а новый (он же - последний) вариант выкладываю.

2nesco: мы условно договорились на том, что в аттаче к этому посту
карма: 9

0
файлы: 1StrMask.rar [1.1KB] [485]
Редактировалось 2 раз(а), последний 2020-01-03 22:44:24