[fpc-pascal] FPImage and GetDataLineStart

Florian Klämpfl florian at freepascal.org
Fri Apr 22 11:23:12 CEST 2011


Am 22.04.2011 00:31, schrieb Michael Van Canneyt:
> 
> 
> On Thu, 21 Apr 2011, Sven Barth wrote:
> 
>> On 21.04.2011 21:45, Michael Van Canneyt wrote:
>>>
>>>
>>> On Thu, 21 Apr 2011, Marco van de Voort wrote:
>>>
>>>> In our previous episode, Michael Van Canneyt said:
>>>>>
>>>>> You can propose whatever you want _but_ generics.
>>>>
>>>> Motivation?
>>>
>>> Threefold:
>>> a) The compiler's handling of generics is still beta code in my opinion.
>>> As far as I know, the original problem I reported when writing the docs
>>> for them is still not solved.
>>>
>>
>> May I ask out of curiosity which problem you mean?
> 
> There were several.
> 
> The first one seems solved (see docs, section on 'A word on scope', the
> local thing), compiler now gives an error (a debatable solution IMHO,
> but better than the crash at the time.).
> 
> Second problem:
> 
> The following compiles:
> 
> uses ucomplex;
> 
> type
>   Generic TMyClass<T> = Class(TObject)
>     Function Add(A,B : T) : T;
>   end;
> 
> 
> Function TMyClass.Add(A,B : T) : T;
> 
> begin
>   Result:=A+B;
> end;
> 
> 
> Type
>   TMyIntegerClass = specialize TMyClass<Integer>;
>   TMyComplexClass = specialize TMyClass<Complex>;
> 
> end.
> 
> but the following does not:
> 
> ---------------------------------------------------------
> unit mya;
> 
> interface
> 
> type
>   Generic TMyClass<T> = Class(TObject)
>     Function Add(A,B : T) : T;
>   end;
> 
> Implementation
> 
> Function TMyClass.Add(A,B : T) : T;
> 
> begin
>   Result:=A+B;
> end;
> 
> end.
> ---------------------------------------------------------
> 
> and program :
> 
> ---------------------------------------------------------
> program myb;
> 
> uses mya, ucomplex;
> 
> Type
>   TMyIntegerClass = specialize TMyClass<Integer>;
>   TMyComplexClass = specialize TMyClass<Complex>;
> 
> end.
> ---------------------------------------------------------
> 
> Results in:
> 
> home: >fpc -S2 myb.pp
> mya.pp(16,12) Error: Operator is not overloaded: "complex" + "complex"
> myb.pp(9,14) Fatal: There were 1 errors compiling module, stopping
> 
> Which is strange to say the least, as the per the definition/intent of
> generics, the code in mya should not know anything about the types that
> will be used when specializing. (in this case complex).
> 
> As per the intent of generics the second program above should compile
> just as well.
> 
> But then different rules will apply for operators and procedure calls:
> - procedure calls must be resolvable at define time
> - Operators must be resolvable at specialization time.
> No principal problem (we can define it so), but strange at least.
> 

It is correct that the second doesn't compile. To make the second
compile, the overloaded operators for the complex type must be defined
inside complex (which was/is? not possible).



More information about the fpc-pascal mailing list