[fpc-devel] Procedural types returning file types

Tomas Hajny XHajT03 at hajny.biz
Fri Dec 18 14:26:07 CET 2020


On 2020-12-18 14:06, Sven Barth wrote:
> Tomas Hajny via fpc-devel <fpc-devel at lists.freepascal.org> schrieb am 
> Fr.,
> 18. Dez. 2020, 11:38:
> 
>> On 2020-12-18 10:01, Blaise--- via fpc-devel wrote:
>> 
>> 
>> Hello,
>> 
>> > The patch http://hg.blaise.ru/public/fpc/rev/698389953e49 (attached)
>> > fixes the following:
>> > -------8<-------
>> > // EXPECTED: 'Error: Illegal function result type'
>> > // ACTUAL: gets compiled
>> > type M = function : file;
>> >
>> > begin
>> > end.
>> > -------8<-------
>> 
>> Sorry for a silly question, but conceptually - why a file (which is
>> technically a record) shouldn't be allowed if records are allowed and
>> the result (i.e. the file) may be assigned to another variable of the
>> type file? Do you have any information why the compiled functionality
>> wouldn't work correctly?
>> 
> 
> Because TP and Delphi don't allow it either. In fact FPC doesn't allow 
> it
> as well for function declarations, but for function and method 
> variables a
> different code path is used.

I see. IIRC at least TP doesn't allow records as return types and using 
records in assignments either whereas FPC does. However, the reasons for 
disallowing file there may be actually related to the second part of 
your response below.


> Sidenote: it also isn't allowed to pass file type parameters by value 
> (the
> compiler checks this) which is why you always see them with "var" or
> "const".

Ah, yes, that indeed has the same reason for which a file shouldn't be 
allowed for return value, thanks for reminding me of this. I believe 
that this is already explicitly specified in the original Pascal 
definition. The reasons are probably conceptual - semantically, 'file' 
in Pascal doesn't mean a record containing some file descriptor and 
other information necessary for working with the file, but the content 
of the file. From this point of view, you could indeed never pass a file 
by value or return it as a return value.

Tomas


More information about the fpc-devel mailing list