[…] The reference manual should somewhere document Write(), WriteLn(), Str() and WriteStr() as special cases: possibly not reserved words but definitely not as ordinary procedures amenable to redefinition. […]
In FPC you can always access the built‑in procedures by specifying an FQI, say system.writeLn despite a custom writeLn declared in the current scope.
I know. But since that group of intrinsics is fundamentally "deeply magical" at the system level I'd have expected them to be parsed and rewritten early: and that's particularly the case if the point of use contains a colon.
Quite frankly, I'm deeply committed to backward compatibility and respecting the spirit of a language but if it were my choice I'd have deprecated that special parameter notation decades ago. Modern Pascal supports parameter lists as used in e.g. Format(), and it has partial support for literal tuples of which later elements can be omitted, and it should be possible to replace e.g.
WriteLn('Pi: ', 3.1416:6:4);
WriteLn(['Pi: ', (3.1416, 6, 4)]);
without causing too much grief. And Wirth apparently agreed in that he axed them from Modula-2, unfortunately he also axed Pascal's string type which was one of the language's major selling points.
MarkMLl