On 16.12.2020 0:07, Sven Barth wrote:
No, those two are in fact correct this way.
Is that the /team's/ consensus?
The modeswitch Result enables the use of Result as an alias for *any* routine …
Incorrect. The identifier Result does not alias the routine, it aliases the
routine's return value.
… that returns a result no matter if an explicit result name is set or not.
I maintain that such approach is an orthogonality violation. In light that FPC
provides a syntax for explicitly naming the return value, the consistent and
conceptually simplest way to treat Result as the implicit/default name for that
value, not as an alias to a name that cannot even be specified in most cases
(non-operators).
Were the presented cases examined when the current behaviour was implemented?
And, if so, what were the points defending it? Does anyone actually think that
there is even one good theoretical or practical reason to reject the following?
-------8<-------
{$modeswitch result+}
// ACTUAL: 'Error: Duplicate identifier "result"'
operator / (const L, R: Char) result: Char;
begin
result := 'Z'
end;
-------8<-------
The compiler basically says: "You cannot name the return value Result because /I/ am
naming the return value Result!". Quite ridiculous and not in the spirit of Pascal.
The following behaviour also fits my narrative rather nicely:
-------8<-------
{$modeswitch result-}
// ACTUAL: 'Fatal: Syntax error, "identifier" expected but ":" found'
operator * (const L, R: Char): Char;
begin
exit('Z')
end;
-------8<-------
Here, rightfully, the compiler does not threat these features as separate/orthogonal:
"You opted out of the default name for the return value, do provide an explicit
name."
Additionally the following will fail as well (this is allowed in mode Delphi
however):
function Result: LongInt;
That is not quite relevant for this discussion. A function and its return value
are different entities.
--
βþ
_______________________________________________
fpc-devel maillist - [email protected]
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel