[fpc-devel] Feature announcement: Record management operators
Anthony Walter
sysrpl at gmail.com
Tue Mar 29 19:36:08 CEST 2016
Maceij,
I did a build using your revision 33381. Compilation with "make all" worked
with fpc 3.0.0 as a starting compiler. However my first test with it
revealed a pretty serious bug:
program mytest;
{$mode delphi}
type
TFoo = record
private
class operator Initialize(var aFoo: TFoo);
class operator Finalize(var aFoo: TFoo);
public
F: Integer;
end;
TFooArray = array of TFoo;
class operator TFoo.Initialize(var aFoo: TFoo);
begin
WriteLn;
WriteLn('TFoo.Initialize');
aFoo.F := 1;
end;
class operator TFoo.Finalize(var aFoo: TFoo);
begin
aFoo.F := 3;
WriteLn('TFoo.Finalize');
WriteLn;
end;
procedure Test;
var
Foos: TFooArray;
begin
SetLength(Foos, 5);
WriteLn('Foos[0].F = ', Foos[0].F);
WriteLn('Foos[1].F = ', Foos[1].F);
WriteLn;
end;
begin
Test;
end.
Outputs:
Foos[0].F = 0
Foos[1].F = 0
TFoo.Finalize
TFoo.Finalize
TFoo.Finalize
TFoo.Finalize
TFoo.Finalize
Notice:
TFoo.Initialize is never invoked.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-devel/attachments/20160329/d509482c/attachment.html>
More information about the fpc-devel
mailing list