Hi!
Ehe ich im QualityCentral einen großen Aufstand mache, will ich gern von euch wissen, ob das ein Bug oder ein Feature ist.
Beschreibung:
Benutzt man das Inc-Kommando mit einem Record, dessen Klassenoperatoren "Inc"
und der implizite Typecast zu "Integer" definiert sind, gibt ein Inc Aufruf mit einem Parameter (oder zwei [Wert des zweiten=1]) einen sinnlosen Wert zurück. Übergibt man indessen als zweiten Parameter einen Wert größer als 1 oder definiert den impliciten Typecast zu Integer nicht, geht alles seinen gewohnten Gang.
Getestet in:
D2006 Enterprise
Programm zum Nachvollziehen:
Delphi-Quellcode:
program bugtest;
{$APPTYPE CONSOLE}
uses
SysUtils;
type
TMyRecord = record
Data : Integer;
class operator Implicit(ARecord : TMyRecord) : Integer;
class operator Add(ARecord : TMyRecord; AInteger : Integer) : TMyRecord;
class operator Inc(AAmount : Integer) : TMyRecord;
end;
{ TMyRecord }
class operator TMyRecord.Add(ARecord: TMyRecord; AInteger: Integer): TMyRecord;
begin
Result.Data:=ARecord.Data+AInteger;
writeln('Adding ',AInteger,' to ',ARecord.Data, '=>', Result.Data);
end;
class operator TMyRecord.Implicit(ARecord: TMyRecord): Integer;
begin
Result:=ARecord.Data;
Writeln('Casting ', ARecord.Data, ' as Integer =>',Result);
end;
class operator TMyRecord.Inc(AAmount: Integer): TMyRecord;
begin
Writeln('Inc ', Result.Data, ' by ', AAmount);
Result:=Result+AAmount;
end;
var
mr : TMyRecord;
begin
mr.Data:=5;
Inc(mr, 2);
Writeln('Next line has to show "7"');
Writeln(mr.Data);
writeln('----------------------');
mr.Data:=5;
Inc(mr, 1);
Writeln('Next line has to show "6"');
Writeln(mr.Data);
Readln;
end.