[fpc-pascal] mode switch madness

Sven Barth pascaldragon at googlemail.com
Sun Apr 14 19:27:59 CEST 2019

Am 14.04.2019 um 04:07 schrieb Ben Grasset:
> I dunno about setting them globally, but generally I do find 
> modeswitches rather annoying, as the combination of features is pretty 
> arbitrary, and they mostly just *disallow* things that couldn't break 
> the code of people who weren't using those features to begin with if 
> they were allowed.
> E.G, I sincerely doubt that anybody has *ever* thought, "man, I sure 
> am glad that {$mode ObjFPC} does not allowed advanced records. It 
> would be specifically bad if it did!" because it just doesn't matter 
> if they weren't using advanced records to start with. It's just a lot 
> of minor rules that nobody can really explain but that tend to add up 
> in relatively annoying ways.
The thing is that we do try to be backwards compatible and thus rather 
conservative with mode ObjFPC. E.g. the following code compiles without 
the modeswitch set, but not with:

=== code begin ===

program tmw;

{$mode objfpc}

   TTest = record
     private: LongInt;
     public: LongInt;
     protected: LongInt;
     strict: Longint;



=== code end ===

This hasn't always been done optimally in the past, e.g. when I added 
class helper support back in '12 or so I didn't protect the changes 
behind a modeswitch. Something I would not do today.

Also the modeswitch itself is definitely required as definitely not all 
language modes should support advanced records by default (e.g. TP or ISO).


More information about the fpc-pascal mailing list