[fpc-pascal] Compiler treatment of dotted reference in class property

Howard Page-Clark hdpc at talktalk.net
Mon Feb 3 14:21:19 CET 2020


On 03/02/2020 13:17, Sven Barth via fpc-pascal wrote:
> Howard Page-Clark via fpc-pascal <fpc-pascal at lists.freepascal.org 
> <mailto:fpc-pascal at lists.freepascal.org>> schrieb am Mo., 3. Feb. 
> 2020, 11:22:
>
>     FPC 3.0.4 compiles this code excerpt without a murmur:
>
>     == code ==
>
>     {$mode objfpc}{$H+}
>
>     type
>
>        TSheetInfo = record
>          name: String;
>          tab: String;
>          title: String;
>          kind: TSheetKind; // an enumeration
>          color: TColor;
>        end;
>
>        TBaseSheet = class(TTabSheet)
>        protected
>          FSheetInfo:      TSheetInfo;
>          ...
>        public
>          constructor Create(aComponent: TComponent; aSheetInfo:
>     TSheetInfo);
>     virtual; reintroduce;
>          ...
>          property SheetKind: TSheetKind read FSheetInfo.kind; // <<
>        end;
>
>        TEntryGrid = class(TCustomStringGrid)
>        private
>          FParentSheet: TBaseSheet;
>          ...
>        public
>          constructor Create(AOwner: TComponent; aParentSheet:
>     TBaseSheet);
>     reintroduce;
>          ...
>          property SheetKind: TSheetKind read
>     FParentSheet.FSheetInfo.kind; // <<
>        end;
>
>     == code end ==
>
>     However, more recent FPCs (and trunk) reject this at the properties
>     (marked above <<) with the error "Record or object type expected".
>
>     Is there a modeswitch or other wheeze that will get recent FPCs to
>     accept dotted notation when specifying property read and write fields?
>
>
> This is simply not allowed for class fields. That it was, was 
> essentially a bug ( 
> https://wiki.freepascal.org/User_Changes_Trunk#Property_field_access_lists_no_longer_allows_classes 
> ).
> Either use records or (TP style) objects or use a getter. If you 
> declare it as "inline" you can essentially get the same code (with the 
> added bonus that you can raise an exception should the field be Nil).
>
> Regards,
> Sven

Thanks for the reference and clarification.

Howard

>
> _______________________________________________
> fpc-pascal maillist  -  fpc-pascal at lists.freepascal.org
> https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20200203/8614f7ac/attachment.html>


More information about the fpc-pascal mailing list