[fpc-devel] Some compiler changes...
Michael Van Canneyt
michael.vancanneyt at wisa.be
Tue Jan 23 09:26:48 CET 2007
On Tue, 23 Jan 2007, Thorsten Engler wrote:
> While playing around with the compiler source to familiarize myself I've
> produced the attached patch. While I didn't set out to produce anything for
> inclusion into the official codebase at least some of the changes might be
> generally useful.
>
> a) now modeswitch: m_ident_escape
>
> Allows escaping of identifiers which might otherwise be recognized as
> keywords. This mirrors Delphi's (and Chrome's) implementation.
>
> type
> TMyRecord = record
> &unit: Integer;
> end;
>
> No space is allowed betweehn & and identifier. As identifiers are not
> allowed to start with digits there is no collision with the &123 support for
> base 8 integer constants.
I think this goes against all that pascal stands for. We don't want to
butcher the language. Next thing you'll be asking to have it case sensitive.
As a programmer you know that certain keywords are keywords. Don't use them
in your fields/variables whatever. Keep you code readable.
>
> b) new modeswitch: m_always_ident_after_dot
>
> There are no valid cases in the pascal grammer where a keyword follows a
> single dot. As a) makes it now possible to declare identifiers which are
> identical to keywords qualified access to these fields can now be simplified
> by always recognizing an identifier/keyword following a dot as a simple
> identifier, no matter if it matches a keyword or not.
>
> I'm not sure if Delphi implements this. Chrome does.
>
> var
> myRecord: TMyRecord;
> begin
> myRecord.unit := 123;
> end;
>
>
> These 2 switches should not affect compatibility to existing code. I can run
> a complete make all / make install with both of these generally active. It
> could be considered to add them to {$mode objfpc}
>
> c) new $mode: m_chrome
If a is not implemented, then B should not be implemented either.
>
> Currently baseed on objfpc with the addition of all 3 new mode switches. In
> addition to a) and b) m_chrome allows the use of "method" as an alternative
> to both procedure and function (if the method is a procedure or function can
> simply be determined by the presence of a defined result type).
No. It obfuscates the difference between procedure and function.
This is not C, but pascal.
Michael.
More information about the fpc-devel
mailing list