Как такое можно было релизить, вообще не понятно.
понедельник, декабря 26, 2011
понедельник, декабря 05, 2011
Знатные грабельки компилятора
Сегодня налетел на такое:
program nested_exception_class;
{$APPTYPE CONSOLE}
{$R *.res}
uses
SysUtils;
Type
EUnitException = Class(Exception);
//
TMyRec = Record
Type
Exception = Class(EUnitException);
EOtherException = Class(Exception);
End;
//
begin
// ожидается: TMyRec.Exception, в действительности: Exception
WriteLn(TMyRec.EOtherException.ClassParent.ClassName);
// утверждение должно быть истинным, но нарушается
Assert(TMyRec.EOtherException.ClassParent = TMyRec.Exception);
end.
Компилятор выбрал неправильного родителя для моего класса (EOtherException), хотя в редакторе, если кликнуть (Ctrl+Click) по, родителю (Class(Exception)) переход происходит к “правильному” классу (TMyRec.Exception). Баг воспроизводится в Delphi 2006, Delphi XE2 Update 2, промежуточные не проверял, но думаю и там воспроизведется.
Подписаться на:
Сообщения (Atom)