[fpc-pascal] Auto vars (again)
Maciej Izak
hnb.code at gmail.com
Sat Aug 18 23:18:47 CEST 2018
2018-08-18 20:26 GMT+02:00 Marcos Douglas B. Santos <md at delfire.net>:
> On Sat, Aug 18, 2018 at 2:04 PM, Ryan Joseph <ryan at thealchemistguild.com>
> wrote:
> >
> > How does TAutoFree in mORMot work? Never heard of this.
>
> See http://blog.synopse.info/post/2014/11/14/Automatic-
> TSQLRecord-memory-handling
worth to note that in FPC you additionally need to use "with ... do" (or
use local variable IAutoFree), otherwise interface will be release
immediately and code will be broken. The example in blog needs to be
corrected:
=== code begin ===
function NewMaleBaby(Client: TSQLRest; const Name,Address: RawUTF8): TID;
var Baby: TSQLBaby;
begin
with TSQLBaby.AutoFree(Baby) do begin
Baby.Name := Name;
Baby.Address := Address;
Baby.BirthDate := Date;
Baby.Sex := sMale;
result := Client.Add(Baby);
end;
end;
=== code end ===
or you need to wait for {$MODESWITCH SCOPEDINTERFACEDESTROY} in NewPascal
to use examples AS-IS (with SCOPEDINTERFACEDESTROY on). To be honest I
forgot to send the patch with SCOPEDINTERFACEDESTROY to FPC when I had
occasion/access to FPC trunk ^^ - anyway I was the only one who want this
in the FPC core team for Delphi compatibility (and for large legacy
projects where is really hard to adjust code which depends on
SCOPEDINTERFACEDESTROY)... FPC core team said that this behavior of Delphi
is not documented and not COM compatible (or is undefined in COM - I don't
remember). Also there is some mystery example for large methods when Delphi
is able to break the rule and such interface is released earlier (but no
one was able to provide this example) - I was also trying without success,
so SCOPEDINTERFACEDESTROY seems really Delphi compatible.
--
Best regards,
Maciej Izak
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20180818/9a30b3fe/attachment.html>
More information about the fpc-pascal
mailing list