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<-------Mailing lists / fpc-devel / 2020-12
Procedural types returning file types
5 messages · 3 people ·
- SSven Barth 2
- TTomas Hajny 2
- UUnknown author 1
Reply by email Subscribe to this list Your subscription
Read-only archive. Use j and k to move between messages.
On 2020-12-18 10:01, Blaise--- via fpc-devel wrote:
Hello,
Show quoted text 10 lines
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?
Tomas
Tomas Hajny via fpc-devel schrieb am Fr.,
18. Dez. 2020, 11:38:
Show quoted text 22 lines
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.
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".
Regards,
Sven
Sven Barth wrote 32 lines
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
The patch http://hg.blaise.ru/public/fpc/rev/698389953e49 (attached) fixes the following:…
Blaise--- via fpc-devel schrieb am Fr.,
18. Dez. 2020, 10:01:
Show quoted text 11 lines
Applied in 47810 with the change of the def parameter of single_type in a separate commit (47809). Thanks.
Regards,
Sven
