Můžu poprosit o komentář? Díky.
Diky za otestovani. Ja to shrnu:
Pokud jsi definoval nahore
V10_4 tj. volala se
System.FreeAndNil a slo to prelozit bez chyb a ja tam nemam chybu, tak se to na vlastnim testu chova stejne, jako ve verzi 10.2, kde jsem tomu predhodil vlastni implementaci
FreeAndNilSydney, podle te z verze 10.4. Ovsem ve skutecnosti se to jako celek chova v podstate tragicky:
- kdyz v 10.2 predhodis FreeAndNil(object.property), tak to prekladac spravne neprelozi, protoze FreeAndNil ma var argument a do toho property nepredas
- Kdyz totez udelas ve verzi 10.4, kde to var u argumentu z buhvi jakeho duvodu nahradili const [ref ] (v podstate typed pointer na pointer), tak pokud je zapnuty inlining, tak to prekladac prelozi silenym hackem tak, ze do FreeAndNil u System.Generics.Collections.TList<T> pro property Items[x ] preda pointer na instance_tlist+$20+idx*sizeof(pointer), coz je adresa v privatnim poli FItems

- To zrejme bude stejne jeste u par trid z System.Generics.Collections, kde maji poznamku, ze FItems musi nasledovat za helperem
- Ale kdyz udelas cokoli jineho, tj. vypnes inlining, napises si vlastni tridu, predhodis tomu jakekoli jine property, tak prekladac mlci, tvari se, ze je vse OK a vysledkem je, ze volani FreeAndNil() Free provede, ale nil ne (prekladac (10.2) vytahne property do automaticke promenne a vynuluje tu).
Kdyz uz bych chtel neco takoveho delat, tak rozhodne obecne, protoze vzdycky nas ucivali, ze nejhorsi jsou vyjimky a moje celozivotni praxe to jen potvrzuje. Uz vidim ty nestastniky, kterym nekdo v teamu pouzije
FreeAndNil na property a pak to cele hodiny ne-li dny hledaji... To obecne reseni bud direktivou prekladaci nebo anotaci,. napr.
[Nilable(FItems)]
property Items[Index: Integer]: T read GetItem write SetItem; default;
[Nilable(FAnyObject)]
property AnyObject: T read GetAnyObject write SetAnyObject;
Jeste ze uz jsem duchodce a pravdepodobnost, ze budu muset jeste neco delat v Delphi, se blizi k nule, protoze mam dojem, ze v EMBC uz neprogramuji, ale jen prasi, nebo tam zacinaji mit slovo nejaci "pythonisti", kterym pripada normalni, ze pri zapisu
objekt.neexistujicici_property = cosi
se nerve a do objektu se prida neexistujici_property jako existujici...