On Mon, Oct 10, 2005 at 02:11:04PM +0200, Florian Klaempfl wrote: > [EMAIL PROTECTED] wrote: > > > Hi. > > > > After a few hours with gdb was isolated errors and strangeness in compiler > > at work with variants: > > > > Example: > > > > function c(const vv: variant): variant; > > begin > > result := vv; > > end; > > > > function b(vv: variant): variant; > > begin > > result := vv; > > end; > > > > function a(var vv: variant): variant; > > begin > > result := vv; > > end; > > > > procedure start; > > var > > v, v1: Variant; > > begin > > v := VarArrayCreate([0, 0], varVariant); > > > > a(v); > > //if variant result of a() isn't assigned, fpc_finalize() at end of a(v) > > //destroys temporary result. But when start() ends fpc_finalize() tryes > > //to destroy it again > > > > b(v); > > //if b() is called then variant param is copied but not whole (deeply), > > vv.varray > > //points to the same place as v.array. At end of b(v) is pointer > > //vv.array destroyed by fpc_decref() and then v.array points to the > > //destroyed memory > > > > c(v); > > //At the start of func c() is v copied to the vv deeply but i think > > //that behaviour of "var" and "const" calling should be the same (by > > //reference) not vy value like c() > > end; > > > > I try to understand compiler code and repair it, but this is "very long > > distance race". But like I see the responses to my previous reports > > (absolutely no interest), this will be fastest solution :(. Really here > > isn't anybody who understand to compiler code and help me with repair? > > Or is anywhere another e-mail list or another comunication channel where > > i can talk about this problem? > > > > Petr > > > > The var arrays problems are known, see also > http://www.freepascal.org/bugs/showrec.php3?ID=3830 > > It requires some design changes though that's why it isn't fixed yet. The > problem is that the compiler handles variants as ref. counted types when > passing > them as parameters etc. However, this is wrong behaviour as soon as a variant > contains an array. Thanks for explanation. Yesterday i looked at compiler code and fpc internals documentation. I must recognize that fixing this is beyond my strength. Is somebody working on it? I can help with debugging. Vararray problem stopped my work -- porting big information system to fpc. In Rtl/fcl i can repair or fill missing, but here i'am helpless. For that reason i hurry on fixing this.
Petr -- Ing. Petr Kristan . EPOS PRO s.r.o., Bozeny Nemcove 2625, 530 02 Pardubice tel: +420 466335223 Czech Republic (Eastern Europe) fax: +420 466510709 _______________________________________________ fpc-devel maillist - fpc-devel@lists.freepascal.org http://lists.freepascal.org/mailman/listinfo/fpc-devel