[fpc-pascal] private type and type compatibility

Jonas Maebe jonas.maebe at elis.ugent.be
Wed Oct 30 15:34:01 CET 2013

On 30 Oct 2013, at 15:00, Sven Barth wrote:

> Am 30.10.2013 14:37, schrieb Jonas Maebe:
>> "Private" is just another way to define a scope, just like a unit  
>> interface and implementation define a scope. Neither the "private"  
>> section nor the interface of unit "u1" is in scope when the  
>> "hidden" type is used.
> Using an interface uses as the analog for private types is flawed in  
> my opinion. The analog code would more like this:
> === code begin ===
> unit u2;
> interface
> function f: tdynarray;
> implementation
> type
>  tdynarray = array of integer;
> function f: tdynarray;
> begin
> end;
> end.
> === code end ===
> Which of course does not compile.

This is not equivalent. A private type declaration in a class adds a  
new identifier that is visible inside that class. You then use it,  
still in that class, to declare the return type of a function. Next,  
in a scope where that type identifier is no longer visible, you call  
the function.

My example is a complete match to that scenario as far as identifier  
visibility is concerned (you use a type in a scope where it is visible  
to declare a function return type, and then call the function in a  
scope where it is not visible). In your example, the type is not  
visible in the place where the function is declared but only where it  
is defined.


More information about the fpc-pascal mailing list