[fpc-pascal] Managed record types
Bart
bartjunk64 at gmail.com
Sat Nov 2 19:10:58 CET 2024
Consider this:
====
type
{ TRec }
TRec = record
// whatsoever
class operator Initialize(var aRec: TRec);
end;
{ TRec }
class operator TRec.Initialize(var aRec: TRec);
begin
writeln('class operator TRec.Initialize(var aRec: TRec)');
end;
function foo: TRec;
begin
writeln('foo');
end;
begin
foo;
end.
===
It outputs:
C:\Users\Bart\LazarusProjecten\ConsoleProjecten>test
class operator TRec.Initialize(var aRec: TRec)
foo
So, the initialization code is called before anything in the function.
Bart
On Sat, Nov 2, 2024 at 6:54 PM Thomas Kurz via fpc-pascal
<fpc-pascal at lists.freepascal.org> wrote:
>
> Hello,
>
> when I make a record type managed by adding an `Initialize` operator according to [1], can I rely on the record being initialized at the beginning of a function in which the record is the function result?
>
> Example:
>
> type TRec = record
> // whatsoever
> class operator Initialize(var aRec: TRec);
> end;
>
> function DoSomething: TRec;
> begin
> // <---- can I assume that `Result` is initialized when the function is entered?
> // more code
> end;
>
> [1] https://wiki.freepascal.org/management_operators
>
> _______________________________________________
> fpc-pascal maillist - fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
--
Bart
More information about the fpc-pascal
mailing list