Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Mailing lists / fpc-devel / 2020-12

Procedural types returning file types

5 messages · 3 people ·

Reply by email Subscribe to this list Your subscription

Read-only archive. Use j and k to move between messages.

Unknown author
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<-------
βþ

Reply by email

Tomas Hajny
to Unknown author

On 2020-12-18 10:01, Blaise--- via fpc-devel wrote:

Hello,

Show quoted text 10 lines
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?

Tomas

Reply by email

Sven Barth
to Tomas Hajny

Tomas Hajny via fpc-devel schrieb am Fr.,
18. Dez. 2020, 11:38:

Show quoted text 22 lines
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.

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

Reply by email

Tomas Hajny
to Sven Barth
Sven Barth wrote 32 lines
Tomas Hajny via fpc-devel 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

Reply by email

Sven Barth
to Unknown author: 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
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<-------

Applied in 47810 with the change of the def parameter of single_type in a separate commit (47809). Thanks.

Regards,
Sven

Reply by email