Einzelnen Beitrag anzeigen

Benutzerbild von chaosben
chaosben

Registriert seit: 27. Apr 2005
Ort: Görlitz
1.358 Beiträge
 
Delphi XE2 Professional
 
#1

[D2006] Bug? class operator Inc & Implicit -> Falsch

  Alt 12. Jun 2007, 11:56
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.
Benjamin Schwarze
If I have seen further it is by standing on the shoulders of Giants. (Isaac Newton)
  Mit Zitat antworten Zitat