Re: Managed record types

Thomas Kurz via fpc-pascal <[email protected]>
Newsgroups gmane.comp.compilers.free-pascal.general
Message-ID <[email protected]>
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 <[email protected]>
To: FPC-Pascal users discussions <[email protected]>
Sent: Sunday, November 3, 2024, 11:06:53
Subject: [fpc-pascal] Managed record types

Thomas Kurz via fpc-pascal <[email protected]> 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

_______________________________________________
fpc-pascal maillist  -  [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.