[fpc-devel] Parameters must match exactly?

Martin fpc at mfriebe.de
Mon May 17 12:13:34 CEST 2010


On 17/05/2010 10:47, Mattias Gaertner wrote:
> On Mon, 17 May 2010 10:40:12 +0100
> Martin<fpc at mfriebe.de>  wrote:
>
>    
>> On 17/05/2010 10:29, Mattias Gaertner wrote:
>> [...]
>>      
>>> Theoretically: yes, this could work for classes.
>>> But as Jonas explained a few times: 'out' is *not* write only.
>>> Out is finalised and must therefore match exactly.
>>> And even write-only is not enough for "object"s because an ancestor
>>> has too less memory.
>>>
>>>        
>> Hm, finalization isn't happening in the user code. So shouldn't be an
>> issue... and:
>> - are class-instance finalized? (maybe with interfaces)
>> - it's an implementation detail of the compiler =>  it could (maybe does)
>> happen, in the calling code (where type info is known)
>>
>> memory is allocated on the heap
>> s and x are both just pointers =>  so the size matches
>> Actually x is a pointer to s, and s a pointer to the memory. but s can
>> be changed, so the memory can be re-allocted.
>>      
> No, for example:
>    
I quite clearly wrote "class-instance"

I am aware it doesn't work for object.

> type
>    TAncestor = object
>      i: string;
>    end;
>
>    TMyObject = object(TAncestor)
>      j: string;  // need more mem
>    end;
>
> procedure Doh(out o: TMyObject);
> begin
>    o.j:='3'; // writing beyond
> end;
>
> procedure A;
> var
>    o: TAncestor; // limited mem
> begin
>    Doh(o);
> end;
>
>
> Mattias
> _______________________________________________
> fpc-devel maillist  -  fpc-devel at lists.freepascal.org
> http://lists.freepascal.org/mailman/listinfo/fpc-devel
>    




More information about the fpc-devel mailing list