[fpc-pascal] Managed record types
Thomas Kurz
fpc.2021 at t-net.ruhr
Mon Nov 4 21:59:47 CET 2024
Thank you. This was a very valuable and helpful comment.
Maybe we can add this information to the wiki?
----- Original Message -----
From: Sven Barth via fpc-pascal <fpc-pascal at lists.freepascal.org>
To: FPC-Pascal users discussions <fpc-pascal at lists.freepascal.org>
Sent: Sunday, November 3, 2024, 11:06:53
Subject: [fpc-pascal] Managed record types
Thomas Kurz via fpc-pascal <fpc-pascal at lists.freepascal.org> schrieb am
Sa., 2. Nov. 2024, 18:47:
> 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
As with any managed type result the Result variable will be initialized
*outside* of the function and passed in as a var-parameter. Depending on
the code and due to how the compiler manages temporary variables involved
in this, this can lead to your code receiving a Result variable upon entry
that had been used by a previous call.
So to be on the safe side assign a Default(YourType) to it (needs current
FPC 3.3.1 to work correctly) or use a local variable of the same type and
overwrite the Result.
Regards,
Sven
More information about the fpc-pascal
mailing list