On 2020-12-18 14:06, Sven Barth wrote:
Tomas Hajny via fpc-devel <fpc-devel@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
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to